布尔变量设置为true后警告为false

时间:2014-02-07 12:25:24

标签: javascript ajax boolean

我有以下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

有人可以告诉我为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

那是因为ajax调用是异步的,这段代码:

if (typeof returnTrueOrFalse === 'boolean' && returnTrueOrFalse)
    alert(wasSuccessfull);
在从ajax调用中检索结果之前调用

您应该提醒您成功回调中的值。

答案 1 :(得分:1)

returnTrueOrFalse必须为true,因此它会警告wasSuccessfull的初始值。

$ .ajax是异步的,即使您的警报代码在他们将同时运行的调用之后被放置,但是ajax调用的结果将发生得太晚。如果您希望在请求完成时触发警报(成功与否),则应更改代码。

http://api.jquery.com/jquery.ajax/开始,您可以查看完整的回调选项。