簡體   English   中英

等待ajax完成功能

[英]wait ajax finish in a function

我有一個函數為foo的對象,其中包含jQuery ajax調用

foo: function() {
    ...
    jQuery.ajax({
            contentType : "application/json",
            type: "POST",
            async: true,
            ...,
            success: function(data) {
               globalVariable = 1;           
            },
            error: function(error) {
            }
    });
}

我的測試代碼:

    var pass = true;
    myObj.foo();

    if (globalVariable !== 1) {
        pass = false;
    }

我也希望語句myObj.foo()用ajax finish完成。 如果ajax沒有完成,則globalVariable不等於1。

我無法在ajax中將async設置為false ,因為這是生產代碼。

您的函數正在運行。 只是它運行異常。 如果要在foo()運行時停止其他進程,請將async設置為false

foo: function() {
    ...
    jQuery.ajax({
            contentType : "application/json",
            type: "POST",
            async: false,
            ...,
            success: function(data) {
               globalVariable = 1;           
            },
            error: function(error) {
            }
    });
}

如果是這種情況,請向foo添加一個函數參數。 在ajax調用完成后,將調用該函數。

var bar = function(){
  pass=true;
}

然后foo將成為

foo: function(func) {
    ...
    jQuery.ajax({
            contentType : "application/json",
            type: "POST",
            async: false,
            ...,
            success: function(data) {
               globalVariable = 1;
               func();           
            },
            error: function(error) {
            }
    });
}

呼叫foo

var pass = false;
myObj.foo(bar);

代碼段遵循promise方法:

    var pass = true;
    var myObj = {
        foo: function () {
            return $.Deferred(function (deferred) {
                jQuery.ajax({
                    type: "POST",
                    url: 'https://httpbin.org/post'
                }).done(function () {
                    deferred.resolve(1);
                }).fail(function () {
                    deferred.reject();
                });
            }).promise();
        }
    };
    myObj.foo().done(function (globalVariable) {
        if (globalVariable !== 1) {
            pass = false;
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM