2014-09-30 92 views
0

打破循環的JavaScript當我試圖擺脫功能母環與break - 它提供了以下錯誤:如何從嵌套函數

Uncaught SyntaxError: Illegal break statement

下面的代碼的相關部分:

for (var i = 0; i < filesLength; i++) { 
     myFunc(arg1, arg2, i); 
    } 


function myFunc (arg1, arg2, i) { 
    var qr = "param1="+arg1+"&param2="+arg2; 
    getParam = new XMLHttpRequest(); 
    getParam.open("POST", "file.php"); 
    getParam.send(qr); 

    getParam.onreadystatechange = (function(getParam){ 
     return function() { 
      if(getParam.readyState == 4){ 
       var res = getParam.responseText; 
       if (res == '') { 
        // do something... 
        break; << THIS ONE 
       } 
      } 
     } 
    })(getParam); 
} 
+1

怎麼樣返回false? – ManirajSS 2014-09-30 19:48:53

+5

它是異步的,所以在ajax調用完成的時候,要遲到纔會破壞任何東西。 – adeneo 2014-09-30 19:48:57

+0

我試過返回false,它沒有切斷它。 – qwaz 2014-09-30 19:49:30

回答

6

你的循環已經很長很長時間了,因爲Ajax調用是異步的。分配給onreadystatechange的功能將來會被調用。您的for循環運行完成,並且所有ajax調用在那段時間都已啓動,並且隨着系統收到響應,它們將逐個完成。

也許你不明白,默認情況下,Ajax調用是異步的。這意味着for循環開始每個ajax調用並繼續運行(並啓動所有ajax調用),而ajax調用由其他位置的服務器處理。然後,在for循環結束後的某段時間,將調用onreadystatechange回調函數,指示其中一個ajax調用已完成。因爲它已經完成,所以要停止for循環已經太遲了。


如果你更好地解釋你正在努力完成什麼,我們可以幫助你做到這一點。例如,如果您想發送一個ajax調用,檢查其結果,然後決定是否要繼續使用更多的ajax調用,那麼您不能使用for循環來啓動它們。你將不得不通過做一個ajax調用來迭代,然後當這個調用完成時,你根據它在完成回調中的結果來決定是否調用下一個,等等。

+0

我不知道。現在我明白了。感謝您的信息。 – qwaz 2014-09-30 19:52:14

+0

你的想法聽起來不錯。我會做的。非常感謝。 – qwaz 2014-09-30 20:00:20