我有以下javascript:
var wasSuccessfull = false;
$.ajax({
url: 'url here',
type: 'POST',
data: JSON.stringify(jsondata),
dataType: 'json',
contentType: 'application/json'
}).success(function (data, status) {
if (status == 'success') {
if (data.hasOwnProperty('d')) {
if (typeof successCallback === 'function') {
successCallback(sender, data.d, true);
}
}
else {
if (typeof successCallback === 'function') {
successCallback(sender, data.d, true);
}
}
}
wasSuccessfull = true;
}).fail(function (jqHXR, status, errorThrown) {
if (typeof failureCallback === 'function') {
failureCallback(sender, status + ': ' + errorThrown + '<p>StackTrace: ' + jqHXR.responseText + "</p>", true);
}
});
if (typeof returnTrueOrFalse === 'boolean' && returnTrueOrFalse)
alert(wasSuccessfull);
在开始时,我将wasSuccessfull
设置为false
,稍后如果ajax调用成功,则设置为true
,最后我alert()
将其设置为<。 / p>
即使wasSuccessfull
设置为true
alert()
提醒值:false
。
有人可以告诉我为什么会这样吗?
答案 0 :(得分:2)
那是因为ajax调用是异步的,这段代码:
if (typeof returnTrueOrFalse === 'boolean' && returnTrueOrFalse)
alert(wasSuccessfull);
在从ajax调用中检索结果之前调用。
您应该提醒您成功回调中的值。
答案 1 :(得分:1)
returnTrueOrFalse必须为true,因此它会警告wasSuccessfull的初始值。
$ .ajax是异步的,即使您的警报代码在他们将同时运行的调用之后被放置,但是ajax调用的结果将发生得太晚。如果您希望在请求完成时触发警报(成功与否),则应更改代码。
从http://api.jquery.com/jquery.ajax/开始,您可以查看完整的回调选项。