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

Loop doesn't work as expected when $.get is called

本文关键字:工作 get 调用 循环      更新时间:2023-09-26

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

传递给$.get的函数是异步执行的,这意味着它可以立即返回,而无需等待get完成。因此,循环运行非常快,并记录数字。然后,每个get请求完成并记录---

如上所述,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
---