2011-09-01 68 views
0

我遇到了這個問題,基本上,我有一個大數組,每當循環做一個循環時,我就分解成更小的數組。在循環中,我有一個ajax調用,將該數組發送到一個url。問題在於它只會調用一次ajax,但它會在控制檯中記錄其他較小的數組。任何想法爲什麼發生這種情況?循環訪問一個數組,每次做一個ajax調用,不工作

//emailArray = [[email protected], [email protected] (up to a number greater than 10) 
    while(emailArray.length) { 
      console.log(emailArray.splice(0,10)); 



      $.ajax({ 
       url:"some/url", 
       type: "POST", 
       data: { 
        "object": emailArray.splice(0,10) 
       }, 
       dataType: "json", 
       success: function (data, status, xhr) { 
        //callback(data); 
        console.log('data from success'); 
        console.log(data); 
       } 
      }); 
      console.log('after ajax'); 
     } 

編輯,循環的目的是發送一個新的Ajax請求的大陣列中的每個10個項目,而在發送陣列中有10個項目。當我將它們放入控制檯時,.splice將數組正確地分解了陣列...但它不是在執行ajax部分

回答

3

.splice()對源數組具有破壞性,所以console.log(emailArray.splice(0,10));搞亂了emailArray並導致錯過迭代。

可以在console.log()語句中使用.slice()(這是不是破壞性的,但返回副本),而不是.splice()這樣的:

//emailArray = [[email protected], [email protected] (up to a number greater than 10) 
    while(emailArray.length) { 
      console.log(emailArray.slice(0,10)); 

      $.ajax({ 
       url:"some/url", 
       type: "POST", 
       data: { 
        "object": emailArray.splice(0,10) 
       }, 
       dataType: "json", 
       success: function (data, status, xhr) { 
        //callback(data); 
        console.log('data from success'); 
        console.log(data); 
       } 
      }); 
      console.log('after ajax'); 
     } 
+0

這工作!謝謝......哈哈,我試圖調試它是一直打破它的事實:) – Bill

+0

這就是爲什麼'splice()'是一個有點棘手的數組函數,這就是爲什麼我沒有用它在我的其他在這裏回答你:http://stackoverflow.com/questions/7273668/split-a-long-array-into-smaller-arrays-with-jquery/7273765#7273765。你必須知道它在使用它時正在修改源數組。 – jfriend00

相關問題