我正在尝试使用jQuery dialog
框beforeClose
功能。我正在检查用户表单数据是否格式正确,如果没有,请将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
这一定是一个简单的错误,如果你看到我的错误,请帮助我!
答案 0 :(得分:1)
那是因为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
。为了您的代码始终工作,您也应该添加它
答案 1 :(得分:1)
ajax的异步行为会使你的函数在ajax成功回调之前返回 - (这是你不想要的)
您可以添加async
:false
var myresult ="":
$.ajax({
type: "POST",
url: url,
data: $tgt.serialize(),
async:false,
success: function(data){
答案 2 :(得分:0)
你的
var myresult
不是全局可用的函数声明它像这样
function submituserupdateform($tgt){
var myresult;
答案 3 :(得分:0)
$ .ajax是异步的,这意味着它会发布请求并立即返回。当ajax请求在后台运行时,正常的脚本执行将继续。
当ajax请求在后台保持对话框打开时运行时,您应该做的是显示一些等待图标。一旦ajax请求返回,使用ajax事件处理程序处理结果,并根据结果关闭对话框或保持打开状态显示错误信息。