2009-04-09 37 views
132

Trên lời gọi thành công jQuery AJAX, tôi muốn lặp qua kết quả của đối tượng. Đây là một ví dụ về cách phản ứng trông trong Firebug.jQuery lặp qua kết quả JSON từ thành công AJAX?

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

Làm cách nào tôi có thể lặp lại kết quả để tôi có quyền truy cập vào từng yếu tố? Tôi đã thử một cái gì đó như dưới đây nhưng điều này dường như không hoạt động.

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

này nên công việc. Bạn có chắc đó chính xác là cùng một mã và cùng một dữ liệu không? –

Trả lời

212

bạn có thể loại bỏ các vòng ngoài và thay thế this với data.data:

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

Bạn đang ở rất gần:

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

Bạn có một mảng các đối tượng/maps nên lặp vòng ngoài trên những. Vòng lặp bên trong lặp lại trên các thuộc tính trên mỗi phần tử đối tượng.

+2

Tại sao lặp lại hai lần? – Asaf

+0

Vòng lặp đầu tiên dành cho "danh mục" trong khi vòng lặp bên trong là một "thuộc tính". Làm thế nào khác được thực hiện? – dcolumbus

+0

Nếu bạn muốn làm việc với phần tử đối tượng hơn là thuộc tính của nó thì sao? Tại sao vòng lặp @ aherrick không hoạt động? – StuperUser

12

Truy cập mảng json giống như bất kỳ mảng nào khác.

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

câu hỏi cũ, nhưng làm thế nào bạn có thể lặp qua các phím json mà không biết tên ... như Test1, Test2, ext ... – BarclayVision

+0

@BarclayVision Bạn chỉ cần sử dụng khóa làm số. Khóa đầu tiên là '[0]', '[1] tiếp theo', v.v. – copilot0910

36

Nếu bạn sử dụng Fire Fox, chỉ cần mở ra một giao diện điều khiển (sử dụng phím F12) và thử này:

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); 
}); 

hy vọng nó sẽ giúp

74

Bạn cũng có thể sử dụng getJSON chức năng:

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

Đây thực sự chỉ là câu trả lời của ifesdjeen, nhưng tôi nghĩ nó có thể b e hữu ích cho mọi người.

+0

Điều này đã giúp. Đối với một số lý do tôi không thể nhận được câu trả lời của @cletus để làm việc nhưng điều này đã làm. Bạn không chắc chắn về bí ẩn lớn về jQuery là gì nhưng mã đơn giản không phải lúc nào cũng hoạt động như bạn mong đợi. – zehelvion

0

$each sẽ làm việc .. Một lựa chọn khác là 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

Hãy thử jQuery.map chức năng, hoạt động khá tốt với bản đồ.

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

Đối với bất cứ ai khác bị mắc kẹt với điều này, nó có thể không làm việc vì cuộc gọi ajax được giải thích dữ liệu trả về dưới dạng văn bản - ví dụ: nó chưa phải là đối tượng JSON.

Bạn có thể chuyển đổi nó thành đối tượng JSON bằng cách sử dụng lệnh parseJSON theo cách thủ công hoặc chỉ cần thêm thuộc tính dataType: 'json' vào cuộc gọi ajax của bạn. ví dụ.

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"); 
    } 
}); 
+0

Điều này cho tôi "dữ liệu không xác định". –

+0

Bạn nên sử dụng biến của riêng mình để lưu trữ dữ liệu bạn đang chuyển đến url. Nếu biến dữ liệu của bạn được gọi là mydata thì hãy sử dụng dữ liệu: mydata –

+0

Ah. Giờ đã hiểu. Cảm ơn. –

2

Bạn cũng có thể sử dụng chức năng getJSON:

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

Tại sao đây không phải là câu trả lời phổ biến? Nó sử dụng một vòng lặp đơn và thực hiện thủ thuật rất tốt. Câu trả lời được chấp nhận thực hiện một cuộc tranh luận kép mà không có ý nghĩa rõ ràng cho việc đầu tiên. –

+0

undefined là đầu ra cho tôi – clarifier

2

Đây là những gì tôi đã đưa ra để dễ dàng xem tất cả các giá trị dữ liệu:

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

+0

Thực ra cái này hoạt động hoàn hảo! – jsanchezs

Các vấn đề liên quan