好的,为了争论,让我们说AJAX调用必须是异步的。
基本上,我有一个jQuery AJAX调用,我希望成功和错误处理程序将值返回到父方法:
以下代码不起作用,因为AJAX调用是异步的。因此,在收到repsonse之前返回函数底部的返回值:
var isValid = false;
$.ajax({
type: "POST",
url: myurl,
dataType: "JSON",
data: $myData,
async: true,
success: function(data) {
isValid = true;
},
error: function() {
isValid = false;
}
});
return isValid;
那么,有没有办法将值BACK传递给异步AJAX调用的调用方法?
答案 0 :(得分:1)
该行
Return isValid;
将在调用完成之前执行,因为它是异步的。
使用
async: false,
答案 1 :(得分:1)
这是我提出的解决问题的解决方案....(感谢@Rodaine给我的想法!)
在调用方法中,我指定了一个回调函数。这是包含AJAX调用的插件:
function ajaxCall(options) {
var url = options["url"] === undefined ? "" : options["url"];
var addLink = options["addLink"] === undefined ? "" : options["addLink"];
var $form = $(this).closest("form");
var $formParamsString = $form.serialize();
var aSuccess = [];
var aError = [];
if ($.isFunction(options["success"]))
aSuccess.push(options["success"]);
if ($.isFunction(options["error"]))
aError.push(options["error"]);
$.ajax({
type: "POST",
url: url,
dataType: "JSON",
data: $formParamsString,
async: true, // Asynchronous to allow for loading image
success: aSuccess,
error: aError
});
}
现在,当我调用此函数时,我可以在选项Object:
中指定回调ajaxCall({
url: "myWebService.cfm",
success: function() {
alert("We did it!");
},
error: function() {
alert("Try again, fool!");
}
});
答案 2 :(得分:0)
你不能这样做,因为isValid总是假的。
如果您在成功/失败后需要做某事,您应该这样做:
success: function(data) {
isValid = true;
otherFunction(isValid);
},
error: function() {
isValid = false;
otherFunction(isValid);
}
通过这种方式,您可以处理不同的案例
答案 3 :(得分:-1)
使用synchronouse ajax call
将async设置为false。