调用$ .get时,循环无法按预期工作

时间:2014-10-31 18:34:39

标签: javascript jquery

我很难理解循环中的$ .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 ("---");    
    });    
}

2 个答案:

答案 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
---