4

我想等到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
}

我想返回值“真/错误”

请帮我。

4

3 回答 3

10

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

jQuery 使绑定回调变得容易(因为jqXHRjQuery 的 ajax 方法返回实现了Deferred):

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

/* millions of lines of code */

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

asyncPS,如果您设置为,您可以做您想做的事情false,但是会在请求运行时锁定浏览器。不要这样做。然后你只有jax。

编辑:你不能结合crossDomain: trueand async: false。跨域必须是异步的。

于 2013-03-06T13:24:33.407 回答
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;
    }
}

我对其进行了简单的测试,但没有跨域测试。

于 2013-03-06T13:58:08.383 回答
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) {

            }
        });
    }
于 2020-12-28T13:49:19.553 回答