簡體   English   中英

調用$ .get時,循環無法按預期工作

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

我很難理解循環中的$ .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完成。 因此,循環真正快速地運行並記錄數字。 然后每個獲取請求完成並記錄-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM