请参阅以下代码:
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个值。
答案 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响应,它们都不会互相阻塞,因为代码是异步解决的