コードは非常に複雑なので、発生している動作が正常なのか、それともコードで発生した他のエラーによるものなのかを確認するために、以下を簡略化しました。
それぞれ独自のコールバックを持つ 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 が間違ったデータを返す原因となっていました。