我正在尝试使用jQuery dialog box beforeClose功能。我正在检查用户表单数据的格式是否正确,如果没有,则向beforeClose返回false,以便用户可以重新输入信息。
对话框代码调用beforeClose中的函数submituserupdateform
.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
这一定是一个简单的错误,如果你看到我的错误,请帮助我!
发布于 2013-04-23 01:43:06
ajax的异步行为将使您的函数在ajax成功回调之前返回(这是您不想要的)
您可以添加async:false
var myresult ="":
$.ajax({
type: "POST",
url: url,
data: $tgt.serialize(),
async:false,
success: function(data){发布于 2013-04-23 01:42:14
这是因为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。对于您的代码总是有效的,您也应该添加以下内容
发布于 2013-04-23 01:41:30
你的
var myresult对于函数并不全局可用,请按如下方式声明它
function submituserupdateform($tgt){
var myresult;https://stackoverflow.com/questions/16153314
复制相似问题