2009-04-09 59 views
132

關於jQuery AJAX成功回調,我想遍歷對象的結果。這是響應在Firebug中的外觀示例。jQuery循環播放AJAX成功的JSON結果?

[ 
{"TEST1":45,"TEST2":23,"TEST3":"DATA1"}, 
{"TEST1":46,"TEST2":24,"TEST3":"DATA2"}, 
{"TEST1":47,"TEST2":25,"TEST3":"DATA3"} 
] 

如何循環結果以便我可以訪問每個元素? 我試過類似下面的東西,但這似乎並沒有工作。

jQuery.each(data, function(index, itemData) { 
    // itemData.TEST1 
    // itemData.TEST2 
    // itemData.TEST3 
}); 
+1

這應該工作。你確定這是完全一樣的代碼和相同的數據嗎? – 2009-04-09 08:43:30

回答

212

可以去除外環和thisdata.data取代:

$.each(data.data, function(k, v) { 
    /// do stuff 
}); 

你接近:

$.each(data, function() { 
    $.each(this, function(k, v) { 
    /// do stuff 
    }); 
}); 

你有對象的數組/映射所以外循環迭代那些。內部循環遍歷每個對象元素的屬性。

+2

爲什麼雙循環? – Asaf 2010-06-22 07:44:07

+0

第一個循環用於「類別」,而其中的循環用於「屬性」。那還做了什麼? – dcolumbus 2010-10-22 16:03:58

+0

如果您想使用對象元素而不是其屬性,該怎麼辦?爲什麼@ aherrick在問題中的循環不起作用? – StuperUser 2010-11-04 11:54:42

12

訪問像任何其他數組一樣的json數組。

for(var i =0;i < itemData.length-1;i++) 
{ 
    var item = itemData[i]; 
    alert(item.Test1 + item.Test2 + item.Test3); 
} 
36

如果你使用火狐狸,只需打開一個控制檯(使用F12鍵),並嘗試了這一點:

var a = [ 
{"TEST1":45,"TEST2":23,"TEST3":"DATA1"}, 
{"TEST1":46,"TEST2":24,"TEST3":"DATA2"}, 
{"TEST1":47,"TEST2":25,"TEST3":"DATA3"} 
]; 

$.each (a, function (bb) { 
    console.log (bb); 
    console.log (a[bb]); 
    console.log (a[bb].TEST1); 
}); 

希望它有助於

74

您也可以使用getJSON功能:

$.getJSON('/your/script.php', function(data) { 
     $.each(data, function(index) { 
      alert(data[index].TEST1); 
      alert(data[index].TEST2); 
     }); 
    }); 

這實際上只是ifesdjeen回答的重新說明,但我認爲它可能會b對人有幫助。

0

$each將工作..另一種選擇是jQuery Ajax Callback for array result

function displayResultForLog(result) 
{ 
     if (result.hasOwnProperty("d")) { 
      result = result.d 
     } 

    if (result !== undefined && result != null) 
    { 
     if (result.hasOwnProperty('length')) 
     { 
      if (result.length >= 1) 
      { 
       for (i = 0; i < result.length; i++) { 

        var sentDate = result[i]; 

       } 
      } 
      else 
      { 
       $(requiredTable).append('Length is 0'); 
      } 
     } 

     else 
     { 
      $(requiredTable).append('Length is not available.'); 
     } 

    } 
    else 
    { 
     $(requiredTable).append('Result is null.'); 
    } 
    } 
3

嘗試jQuery.map功能,效果很好用的地圖。

var mapArray = { 
 
    "lastName": "Last Name cannot be null!", 
 
    "email": "Email cannot be null!", 
 
    "firstName": "First Name cannot be null!" 
 
}; 
 

 
$.map(mapArray, function(val, key) { 
 
    alert("Value is :" + val); 
 
    alert("key is :" + key); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

12

對於其他人堅持了這一點,它可能無法正常工作,因爲Ajax調用解釋你返回的數據爲文本 - 即它沒有一個JSON對象。

您可以通過手動使用parseJSON命令或簡單地將dataType:'json'屬性添加到您的ajax調用中,將其轉換爲JSON對象。例如

jQuery.ajax({ 
    type: 'POST', 
    url: '<?php echo admin_url('admin-ajax.php'); ?>', 
    data: data, 
    dataType: 'json', // ** ensure you add this line ** 
    success: function(data) { 
     jQuery.each(data, function(index, item) { 
      //now you can access properties using dot notation 
     }); 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
     alert("some error"); 
    } 
}); 
2

您還可以使用的getJSON功能:

$.getJSON('/your/script.php', function(data) { 
    $.each(data, function(index) { 
     alert(data[index].TEST1); 
     alert(data[index].TEST2); 
    }); 
}); 
2

這是我想出了輕鬆查看所有數據值:

var dataItems = ""; 
 
$.each(data, function (index, itemData) { 
 
    dataItems += index + ": " + itemData + "\n"; 
 
}); 
 
console.log(dataItems);