首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AJAX完成之前未出现成功函数

问在AJAX完成之前未出现成功函数
EN

Stack Overflow用户
提问于 2013-04-23 01:39:40
回答 4查看 580关注 0票数 1

我正在尝试使用jQuery dialog box beforeClose功能。我正在检查用户表单数据的格式是否正确,如果没有,则向beforeClose返回false,以便用户可以重新输入信息。

对话框代码调用beforeClose中的函数submituserupdateform

代码语言:javascript
复制
.dialog({beforeClose: function () {
  formresult=submituserupdateform($('#myaccountdialog').find('form'));
  if (formresult !="okay"){
    return false;
 }
}})

submituserupdateform函数检查代码中是否存在错误:

代码语言:javascript
复制
function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          var myresult= "notokay";
        } else {
          var myresult ="okay";
        }
      },
      dataType: "html"
    });
   return myresult;
}

我已经搜索并找到了https://stackoverflow.com/questions/1632039/return-value-from-ajax-call,但是我已经在我的成功回调中设置了myresult。我也尝试过ajaxComplete,ajaxSuccess,.done。根据控制台,我没有尝试过设置myresult;我总是以一个:

Uncaught ReferenceError: myresult is not defined

这一定是一个简单的错误,如果你看到我的错误,请帮助我!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-23 01:43:06

ajax的异步行为将使您的函数在ajax成功回调之前返回(这是您不想要的)

您可以添加async:false

代码语言:javascript
复制
 var myresult ="":
 $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      async:false,
      success: function(data){
票数 1
EN

Stack Overflow用户

发布于 2013-04-23 01:42:14

这是因为myresult的作用域仅限于成功块。在外部声明它

代码语言:javascript
复制
function submituserupdateform($tgt){
  var url='./includes/admin/user/myaccount.php';
  var myresult;
  $.ajax({
      type: "POST",
      url: url,
      data: $tgt.serialize(),
      success: function(data){
        $("#myaccountdialog").html(data);
        if ($('.error').length){
          myresult= "notokay";
        } else {
          myresult ="okay";
        }
        return myresult;

      },
      dataType: "html"
    });

}

而且,正如@Mohammad Adil指出的那样,在formResult被赋予来自AJAX的值之前,有可能会执行下面的代码

代码语言:javascript
复制
if (formresult !="okay"){
    return false;
 }

在这种情况下,您可以按照他的建议使用async = false。对于您的代码总是有效的,您也应该添加以下内容

票数 1
EN

Stack Overflow用户

发布于 2013-04-23 01:41:30

你的

代码语言:javascript
复制
var myresult

对于函数并不全局可用,请按如下方式声明它

代码语言:javascript
复制
function submituserupdateform($tgt){

    var myresult;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16153314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档