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中打招呼,但是每当我放async: false东西时,一切都很好。我真的需要异步请求。

提前感谢您的帮助。

4

3 回答 3

4

我猜i当返回成功时,计数会在你的循环中混淆。success将在循环运行后返回,因此这将产生意想不到的结果。

您可以返回i发送的值然后在您的方法中使用它data吗?我猜这会解决你的问题。responsegetDocumentById

新代码尝试:

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);
}

我已经将 ajax 调用包装在一个匿名函数中,这样i相对于 ajax 调用的值永远不会改变。

于 2013-10-01T11:08:02.503 回答
1

首先,您在循环中运行 ajax 调用。如果您关闭了异步,这将没问题。但是由于您打开了异步,循环不会等待 ajax 完成其工作。

最好的办法是使用内部循环 ajax 将值获取到全局变量,然后使用该变量稍后绘制图形。

于 2013-10-01T11:05:56.793 回答