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
}

値「true/error」を返したい

私を助けてください。

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: true:とを組み合わせることはできません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 に答える