5

私は次々と2つのAJAXリクエストを持っています-

var firstResult;
var secondResult;

FirstAjaxrequest({
        callback: function (options, success, response) {
            if(success)
            {
                firstResult = true;
            }
            else
            {
                firstResult = false;
            }
        }    
    });

SecondAjaxrequest({
     callback: function (options, success, response) {
            if(success)
            {
                secondResult= true;
            }
            else
            {
                secondResult= false;
            }
     }    
});

DisplayMessage(); // This function should display a message depending on     
                     FirstResult and secondResult
4

5 に答える 5

12

リクエストごとに変数を作成して、リクエストが成功したことを示すことができます。リクエストが成功したら、リクエストごとにこの変数をそれぞれ変更してから、関数を呼び出します。

関数内で両方の変数をチェックするだけです。両方とも true の場合は両方のリクエストが成功し、それ以外の場合は少なくとも 1 つが失敗し、if()条件は false になります。

var firstResult = false,
    secondResult = false;

FirstAjaxrequest({
    callback: function (options, success, response) {
        if(success) {
            firstResult = true;
            DisplayMessage();
        }
    }    
});

SecondAjaxrequest({
    callback: function (options, success, response) {
        if(success) {
            secondResult= true;
            DisplayMessage();
        }
    }    
});

function DisplayMessage(){
    if(firstResult && secondResult){
        //Both requests successful
    } else {
        //Either still waiting for a request to complete
        // or a request was not successful.
    }
}
于 2013-01-21T14:12:01.497 に答える
1

これを試してみてください

FirstAjaxrequest({
            callback: function (options, success, response) {
                if(success)
                {
                    firstResult = true;
                }
                else
                {
                    firstResult = false;
                }
                SecondAjaxrequest({
                     callback: function (options, success, response) {
                            if(success)
                            {
                                secondResult= true;
                            }
                            else
                            {
                                secondResult= false;
                            }
                            DisplayMessage(); // Now we have access to first and second result as the 
                                             //as the second request is within the scope of the first request
                     },
                     scope: this // We can pass the first request to the second request as the context 
                });
            }    
        });
于 2013-01-22T11:43:12.237 に答える
1

EXTJS でそれを行うより良い方法があるかもしれませんが、単純な JS ソリューションは

var firstResult;
var secondResult;
var reqCount = 2;
var returnedCount = 0;

function isDone () {
    returnedCount++
    if ( returnedCount === reqCount ) {
         console.log(firstResult, secondResult);
    }
}

FirstAjaxrequest({
        callback: function (options, success, response) {
            if(success)
            {
                firstResult = true;
            }
            else
            {
                firstResult = false;
            }
            isDone();
        }    
    });

SecondAjaxrequest({
     callback: function (options, success, response) {
            if(success)
            {
                secondResult= true;
            }
            else
            {
                secondResult= false;
            }
            isDone();
     }    
});
于 2013-01-21T14:14:10.437 に答える
0

各リクエストの完了後、他のリクエストの結果が受信されたかどうかを確認する必要があります。このようなもの:

var result1 = null;
var result2 = null;
function DoAjax() {
    $.get(url1, {}, function (data) {
         result1 = data;
         DoSth();
    });
    $.get(url2, {}, function (data) {
         result2 = data;
         DoSth();
    });
}
function DoSth() {
    if(result1 != null && result2 != null) {
         //...
    }
}
于 2013-01-21T14:13:46.877 に答える
0

警告: jQuery の回答です。extjsDeferreds と Promises が同様にサポートされているかどうかはわかりません。

これは、 jQuery Deferredについて学ぶ絶好の機会です。

$.when(firstAjaxrequest(...), secondAjaxrequest(...))
.then(function (firstResult, secondResult) {
    ...
});

firstAjaxrequestこれは、とsecondAjaxrequest関数の両方が、 によって返されるようなDeferredまたはPromiseオブジェクトを返すことを前提としています$.ajax

于 2013-01-21T14:15:09.697 に答える