在AJAX完成之前没有发生成功函数

我试图使用之前的jQuery dialog beforeClosefunction。 我正在检查用户表单数据是否格式正确,如果没有,则返回falsebeforeClose ,这样用户就可以重新输入信息。

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

 .dialog({beforeClose: function () { formresult=submituserupdateform($('#myaccountdialog').find('form')); if (formresult !="okay"){ return false; } }}) 

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

 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 。 我也尝试过ajaxCompleteajaxSuccess.done 。 根据控制台,我没有尝试任何设置我的myresult ; 我总是以:

Uncaught ReferenceError: myresult is not defined

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

ajax的异步行为会使你的函数在ajax成功回调之前返回 – ( 这就是你不想要的

您可以添加asyncfalse

  var myresult ="": $.ajax({ type: "POST", url: url, data: $tgt.serialize(), async:false, success: function(data){ 

那是因为myresult只限于成功阻止。 在外面宣布它

 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赋值

 if (formresult !="okay"){ return false; } 

在这种情况下,您可以按照他的建议使用async = false 。 为了您的代码始终工作,您也应该添加它

您的

 var myresult 

函数不是全局可用的,声明它是这样的

 function submituserupdateform($tgt){ var myresult; 

$ .ajax是异步的,这意味着它将发布请求并立即返回。 当ajax请求在后台运行时,正常的脚本执行将继续。

你应该做的是显示一些等待图标,同时ajax请求在后台保持对话框打开时运行。 一旦ajax请求返回,使用ajax事件处理程序处理结果,并根据结果关闭对话框或保持打开状态显示错误消息。