setTimeout用于增量页面加载

时间:2014-09-25 11:28:09

标签: javascript jquery ajax

请参阅以下代码:

function GetSQLTable() {
        var str = $("#<%=fieldGroupReferences.ClientID%>")[0].value
        var res = str.split(",");
        $("#LoadingImage").show();
        $("#LoadingImage2").show();

        for (var i = 0; i < res.length; i++) {
                alert(res[i])
                (function(i,res) {
                    setTimeout(function (i,res) {
                        alert(res[i])
                        GetSQLTable2(i, res.length,res)
                    }, 0)
                })(i,res)
            }
    }

第一个警报显示正确的信息。第二个更改错误(未定义)。这是为什么?

另外,我被告知这种方法应该在有很多AJAX请求时停止网页崩溃(这是一个增量页面加载)。但是,我不明白如何在AJAX请求之间设置零秒超时将有所帮助。 GetSQLTable2执行AJAX调用。

fieldGroupReferences最多可包含50个值。

1 个答案:

答案 0 :(得分:0)

这个jsbin链接应该回答你的问题 JSBIN

致电时

setTimeout(function(res,i){
//using res and i here
},0)

不要使用res,i作为函数参数,通过闭包res的逻辑,我默认在函数内部可用。如果你使用res,那么你正在创建一个带有新参数的函数,其中没有值被发送到。 所以它应该只是

 setTimeout(function(){
    //using res and i here
    },0)

我相信当你调用setTimeout(function(){}时,0)setTimeout的格式是这样的,

function setTimeout(callback,time){
   after-time{
      callback(); //observe here we are not passing anything as arguements, i am not sure but setTimeout may pass its own values like how $.on passes 'events' to callbacks
   }    
}

回答第二部分关于设置0秒如何帮助, 通过设置0秒,以外行人的话来说,你将以异步方式继续流动!因此,无论收到多少ajax响应,它们都不会互相阻塞,因为代码是异步解决的