原代码是使用一个循环执行批量的$.get操作,如果使用单一循环过大,会瞬间对服务器做成大量请求。
for (i = 1; i < n; i++) {
$.get("http://xxx/" + i,
function(data) {
do other..
})
}
如果可以实现能否使用jQuery的Deferred Object进行代码的优化?把当完成一个get后再执行另外一个?令代码更有可读性?现在我用的办法是这样子:
var url = new Array();
for (i = 1; i < n; i++) {
url.push("http://xxx/" + i)
}
var doGet = function() {
if (url.length > 0) {
var tmpimg = url.shift();
$.get(tmpimg,
function(data) {
setTimeout(function() {
doGet()
},
500); //延时执行
})
} else {
//完成//
}
};
属于流程控制问题。
可以借鉴很多 Flow Control 的库类来协助完成该功能。例如 wind.js, async 等。
使用这些的好处是可以更方便地处理异常。楼上的递归方法很好的解决了问题,但是如果出现异常,就不方便处理了。
花了几分钟自己裸写了一个,供参考。推荐去学习 wind.js , async 的实现(我还没看过 -_- )。
这个的优点是统一异常的处理。代码的层级可能会少一些。