2011-11-09 16 views
0
$("#placeholder").bind("plotselected", function (event, ranges) { 

          var keysArr = [1, 6, 8]; 

          for (var i = 0; i < keysArr.length; ++i){ 

           $.ajax({ 
            type:"post", 
            dataType:"json", 
            data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[i]}, 
            url:"getDataByZoom.php", 

            cache: false, 
            success: function(data) { 

              data1_1 = data[0]; 
              data2_1 = data[1]; 
              data1_6 = data[0]; 
              data2_6 = data[1]; 
              data1_8 = data[0]; 
              data2_8 = data[1]; 

            } 
           }); 
          } 

上述代碼按照我的預期運行,但硬編碼。因此我使用下面的代碼通過for循環執行相同的操作。無法通過循環獲得ajax成功函數的數組元素

但是,也有在下面的代碼幾個問題:

  1. 的結果使用的console.log(keyval1)
  2. keyVal1 =數據[0],這裏的日期的值[0時data1_undefined ]沒有傳遞給keyVal1。

有沒有anyoen知道錯誤在哪裏?多謝!

$("#placeholder").bind("plotselected", function (event, ranges) { 

          var keysArr = [1, 6, 8]; 

          for (var i = 0; i < keysArr.length; ++i){ 

           $.ajax({ 
            type:"post", 
            dataType:"json", 
            data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[i]}, 
            url:"getDataByZoom.php", 

            cache: false, 
            success: function(data) { 

              keyVal1 = 'data1_' + keysArr[i]; 
         keyVal2 = 'data2_' + keysArr[i]; 


              keyVal1 = data[0]; 
              keyVal2 = data[1]; 

            } 
           }); 
          } 
+0

閱讀中的for循環更多關於關閉你檢查什麼'i'變量是你成功的回調?我敢打賭,這是你不希望的。 – Heikki

回答

0

您還沒有關閉您的for循環...試試這個:

for (var i = 0; i < keysArr.length; ++i){ 
       (function(value) { 
          $.ajax({ 
           type:"post", 
           dataType:"json", 
           data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[value]}, 
           url:"getDataByZoom.php", 

           cache: false, 
           success: function(data) { 

             keyVal1 = 'data1_' + keysArr[value]; 
        keyVal2 = 'data2_' + keysArr[value]; 


             keyVal1 = data[0]; 
             keyVal2 = data[1]; 

           } 
          }); 
          })(i); 
         } 

編輯:什麼是你想用keyVal1辦?使用此代碼,您將覆蓋循環每次迭代的舊值。你爲什麼不使用對象像keyVal1 &的

初始化這個keyVal2:

keyVal1 = {}; 
keyVal2 = {}; 

阿賈克斯成功處理程序:

success: function(data) { 

        keyVal1['data1_' + keysArr[value]] = data[0]; 
        keyVal2['data2_' + keysArr[value]] = data[1]; 

        } 

然後你找回你的價值是這樣的: keyVal1 [」 data1_1']

+0

感謝@rohk,我解決了使用您的解決方案的第一個問題。但是,第二個問題仍然不起作用。 – Acubi

+0

再次感謝@rohk!該代碼僅在varialbe名稱爲data1_1或data2_1時起作用。因此,keyVal1 ['data1_1']不能是變量名稱。 – Acubi

+0

嗨@rohk,我已經通過使用eval('data1 _'+ keysArr [value] +'= data [0]')找到了解決方案,它的工作原理非常完美。 – Acubi

0

你需要在循環內部有閉包,否則你要調用AJA的成功函數X請求將在for循環完成後繼承i的值。

試試這個:

for(var i = 0; i < keysArr.length; ++i) { 
    (function(value) { 
     $.ajax({ 
      type:"post", 
      dataType:"json", 
      data:{"minVal":ranges.xaxis.from, "maxVal":ranges.xaxis.to, "sid":keysArr[value]}, 
      url:"getDataByZoom.php", 
      cache: false, 
      success: function(data) { 
       keyVal1 = 'data1_' + keysArr[value]; 
       keyVal2 = 'data2_' + keysArr[value]; 
       keyVal1 = data[0]; 
       keyVal2 = data[1]; 
      } 
     }); 
    }) (i); 
} 

您可以在以下博客>http://www.mennovanslooten.nl/blog/post/62