我很难理解循环中的$ .get调用。在下面的例子中,我在一个函数中调用$ .get(我在$ .get上读取的文件对于这个问题并不重要),它似乎在所有第一个循环之后被读取完了。
我希望控制台显示:
---
1
---
2
---
3
---
但正在显示
1
2
3
4
5
6
7
8
9
10
---(11)
你能告诉我为什么吗?
http://jsfiddle.net/qh6zn514/1/
<Button id="clickme">Click me</button>
$("#clickme").click(function() {
for ($i=0;$i<=10;$i++)
{
readNumber();
console.log($i);
}
})
function readNumber () {
$.get ("file", function(txt) {
console.log ("---");
});
}
答案 0 :(得分:5)
传递给$ .get的函数执行async,这意味着它立即返回而不等待get完成。因此循环快速运行并记录数字。然后每个get请求完成并记录---
答案 1 :(得分:1)
如上所述,Ajax请求是异步的。阅读上面的帖子以获得解释。以下是您的代码的可能解决方案:
http://jsfiddle.net/qh6zn514/1/
$("#clickme").click(function() {
for ($i = 1; $i <= 10; $i++)
{
readNumber($i)
}
})
function readNumber ($i) {
$.get ("file", function(txt) {
console.log($i)
console.log ("---");
});
}
输出:
1
---
2
---
3
---
4
---
5
---
6
---
7
---
8
---
9
---
10
---