1

コードは非常に複雑なので、発生している動作が正常なのか、それともコードで発生した他のエラーによるものなのかを確認するために、以下を簡略化しました。

それぞれ独自のコールバックを持つ 2 つの個別の ajax リクエストがあります。どちらが最初に完了し、一方が他方に依存していないかは気にしません

function ajax(url, cbS){
    $.ajax({
        url: url,
        contentType: 'application/json',
        dataType: 'json', 
        success: function(data){
            cbS(data)
        },
    });
}

function callbackSuccess1(data){
    $('#div1').html(data)
}
function callbackSuccess2(data){
    $('#div2').html(data)
}

//request#1
ajax(myapiurl+'&peram1=100', callbackSuccess1);
//request#2
ajax(myapiurl+'&peram2=200', callbackSuccess2);

問題: callbackSuccess1 が request#2 用のデータを取得する場合と、その逆の場合があります。

どちらの要求が最初に完了すると callbackSuccess1 が起動され、2 番目に完了すると callbackSuccess2 が起動されるようです。

コールバックを特定のリクエストにバインドして、各リクエストが完了する順序に関係なく、適切なコールバックが発生するようにする必要があります。

その他の情報: 私の支持者は django-tastypie です。この時点で、tastypie が何らかの形で応答を台無しにしていると考えています。JavaScript が不変であるように見えることを考えると、これが唯一の論理的な結論です。

これが実際に発生していることの証拠は、リクエスト#1の応答を調べると、データオブジェクトが明らかにリクエスト#2を対象としていることです...

結論: 「ajax() 関数を呼び出すたびに独自のクロージャが作成される」ことを確認していただきありがとうございます。これは私が間違っていると思ったものでした。API に問題が見つかりました。私はいくつかのファンキーなことをしていましたが、変数が時間内に破棄されていなかったようで、最初のリクエストが 2 番目のリクエストよりも長くかかった場合に API が間違ったデータを返す原因となっていました。

4

2 に答える 2

0

おそらくjsonpを使用して、$.ajaxのURLにコールバッククエリパラメーターを指定できます

callback は、サーバーから応答が返されるたびに呼び出される JavaScript 関数の名前になります。

詳細については、jquery ドキュメントを参照してください: http://api.jquery.com/jQuery.ajax/

理論について: http://en.wikipedia.org/wiki/JSONP

これは主にクロスサイト ajax 呼び出しに使用されます。

于 2013-09-04T22:55:38.873 に答える