Ajax异步响应没有加载到div中

时间:2013-10-01 11:00:05

标签: javascript jquery ajax asynchronous

这是困扰我的事。我的代码在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的东西都运行正常。我真的需要异步请求。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

我猜测返回成功时,i计数会在循环中混乱。 <{1}}将在循环运行后返回,因此会产生意外结果。

您是否可以返回success i中发送的data值,然后在response方法中使用此值?我猜这会解决你的问题。

尝试新代码:

getDocumentById

答案 1 :(得分: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调用,因此相对于ajax调用,i的值永远不会改变。

答案 2 :(得分:1)

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

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