0

これが私を悩ませているものです。私のコードは で実行されていdocument.readyます。リクエストを非同期にする必要があります。つまり、async: true

for (var i = 0; i < totalGraphs; i++) {
    var kpiId = kpiIds[i];
    jQuery.ajax({
        type: 'POST',
        url: graphUrl,
        data: "kpiId="+kpiId+"&divId="+(i+1),
        async: true, //if false things are working fine
        cache:false,
        success: function(response){
            document.getDocumentById("graph" + (i + 1)).innerHTML("hello");
        },
        error:function(XMLHttpRequest, textStatus, errorThrown) {
        }
    });
}

このリクエストは私のgraphX divにhelloを入れませんが、入れたときはいつでもうまくいきasync: falseます。リクエストを非同期にする必要があります。

助けてくれてありがとう。

4

3 に答える 3

4

i成功が返されたときに、ループ内でカウントが混乱していると思います。successループが実行された後に戻るため、予期しない結果が生じます。

i送信された値dataを返し、これをメソッドresponseで使用できますか? getDocumentByIdこれで問題が解決すると思います。

試す新しいコード:

for(var i=0;i<totalGraphs;i++){
    jQuery.ajax({
        type: 'POST',
        url: graphUrl,
        data: { kpiId: kpiIds[i], divId: (i+1) },
        async: true, //if false things are working fine
        cache:false,
        success: function(response){
            document.getDocumentById("graph" + response.count).innerHTML("hello");
        },
        error:function(XMLHttpRequest,textStatus,errorThrown){}
    });
}
于 2013-10-01T11:05:06.903 に答える
4

これを試して...

for (var i = 0; i < totalGraphs; i++){
    (function ajaxCall(index) {
        var kpiId = kpiIds[index];
        jQuery.ajax({
            type: "POST",
            url: graphUrl,
            data: {
                kpiId : kpiId,
                divId : index + 1
            },
            async: true, //if false things are working fine
            cache: false,
            success: function(response) {
                document.getDocumentById("graph" + (index + 1)).innerHTML("hello");
            },
            error: function(XMLHttpRequest,textStatus,errorThrown) {}
        });
    })(i);
}

iajax 呼び出しに対して の値が変化しないように、ajax 呼び出しを無名関数でラップしました。

于 2013-10-01T11:08:02.503 に答える
1

まず、ループ内で ajax 呼び出しを実行しています。非同期をオフにしている場合、これは問題ありません。しかし、非同期をオンにしたので、ループは ajax が作業を完了するのを待ちません。

最善の方法は、内側のループ ajax を使用してグローバル変数に値を取得し、その変数を使用して後でグラフを描画することです。

于 2013-10-01T11:05:56.793 に答える