繁体   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