在AJAX完成之前没有发生成功函数
我试图使用之前的jQuery dialog
beforeClose
function。 我正在检查用户表单数据是否格式正确,如果没有,则返回false
到beforeClose
,这样用户就可以重新输入信息。
对话框代码调用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
。 我也尝试过ajaxComplete
, ajaxSuccess
, .done
。 根据控制台,我没有尝试任何设置我的myresult
; 我总是以:
Uncaught ReferenceError: myresult is not defined
这一定是一个简单的错误,如果你看到我的错误请帮助我!
ajax的异步行为会使你的函数在ajax成功回调之前返回 – ( 这就是你不想要的 )
您可以添加async
: false
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事件处理程序处理结果,并根据结果关闭对话框或保持打开状态显示错误消息。