我正在使用ajax调用来检查一些验证,然后通常通过html提交表单。在我的ajax电话中,
function checkId() {
var str = $("#formObj").serialize();
$.ajax({
type : "post",
data : str,
url : "checkForId.mt",
async : false,
success : function(txt) {
if (txt == "pass") {
return "true";
} else if (txt == "same") {
$("#errorMsgIdSame").removeClass("hidden");
return "false";
}
},
error : function() {
alert("Error");
}
});
}
如果控件进入“通过”,则应继续执行。如果它变为“相同”,则执行应该停止。 我从其他方法中调用这个ajax方法。
function validateForm() {
var isValid = true;
isValid = checkId();
if (!isValid) {
$("#errorMsg").removeClass("hidden");
}
return isValid;
}
在按钮点击时调用此validatioForm。现在ajax代码正在运行,但validateForm方法没有返回ajax方法。
需要指明如何进行此操作,以便捕获ajax方法的返回以及如何从ajax方法返回。
答案 0 :(得分:2)
如果我正确理解了你的问题,你想从外部函数返回内部函数的结果。 checkId
的这个定义就是这样做的。
function checkId() {
var result;
var str = $("#formObj").serialize();
$.ajax({
type : "post",
data : str,
url : "checkForId.mt",
async : false,
success : function(txt) {
if (txt == "pass") {
result = true;
return;
} else if (txt == "same") {
$("#errorMsgIdSame").removeClass("hidden");
result = false;
return;
}
},
error : function() {
alert("Error");
}
});
return result;
}
答案 1 :(得分:1)
ajax调用是异步的。
当你调用ajax时,发生的事情是ajax启动一个新线程来执行它的任务 - 在你的案例中是一个帖子。
之后调用ajax的代码继续运行。
当ajax调用正在执行的任务返回时,它会根据任务状态执行其pass或fail部分中的任何内容。
所以基本上你的checkId方法完成并在ajax完成之前返回。
我建议从成功部分或失败部分触发你需要的返回值,如下所示:
success : function(txt) {
if (txt == "pass") {
newfunction(true);
} else if (txt == "same") {
$("#errorMsgIdSame").removeClass("hidden");
newfunction(false);
}
},
编辑:
function newfunction(passFail)
{
//Do something with variable passFail
}