等到jquery ajax请求完成并返回值

时间:2013-03-06 13:21:37

标签: jquery ajax return-value file-exists

我想等到ajax调用完成并返回值。

function isFileExists(url) {
    var res = false;
    $.ajax({
        type: "GET",
        async: false,
        url: url,
        crossDomain: true,
        dataType: "script",
        success: function () {
            res = true;
        },
        error: function () {
            res = error;
        },
        complete: function () {

        }
    });
    return res; //It is always return false
}

我想返回值“true / error”

请帮帮我。

3 个答案:

答案 0 :(得分:10)

你不能这样做。这不是ajax的工作方式。您不能依赖于在任何给定时间完成的ajax请求...或完成。您需要做的任何工作都是基于ajax请求 必须 在ajax回调中完成。

jQuery可以很容易地绑定回调(因为jQuery的ajax方法返回jqXHR实现了Deferred):

var jqXHR = $.ajax({/* snip */});

/* millions of lines of code */

jqXHR.done(function () {
    console.log('true');
}).fail(function () {
    console.log('false');
});

P.S。如果将async设置为false,则可以执行您想要执行的操作,但在请求运行时会锁定浏览器。不要这样做。那你就是jax。

编辑:您无法合并crossDomain: trueasync: false。跨域必须是异步的。

答案 1 :(得分:0)

也许这对你有用:

function isFileExists(url, init) {
    var res = null;
    var _init = init || false;

    if (!_init) {
        _init = true;
        $.ajax({
             type: "GET",
             url: url,
             crossDomain: true,
             dataType: "script",
             success: function () {
                 res = true;
             },
             error: function () {
                 res = 'error';
             },
             complete: function () {

             }
        });
    }

    if (res==null) {
        setTimeout(function(){ isFileExists(url, _init); }, 100);
    } else {
        return res;
    }
}

我对它进行了简要测试,但没有跨域测试。

答案 2 :(得分:0)

试试这个代码。它对我有用。

 function getInvoiceID(url, invoiceId) {
        return $.ajax({
            type: 'POST',
            url: url,
            data: { invoiceId: invoiceId },
            async: false,
        });
    }
    function isInvoiceIdExists(url, invoiceId) {
        $.when(getInvoiceID(url, invoiceId)).done(function (data) {
            if (!data) {

            }
        });
    }
相关问题