2011-05-10 44 views
7

thể trùng lặp:
How do I return JSON and loop through the returned json in jQuery in MVC app?Làm cách nào để lặp lại dữ liệu JSON bằng jquery?

Đây là dữ liệu của tôi được trả về bởi bộ điều khiển MVC và tôi có được điều này trong callback thành công của tôi:

[{ "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "First comment!!", "dt" : { "$date" : 1304966277978 } }, 
{ "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "Second comment!!", "dt" : { "$date" : 1304966347677 } }, 
{ "_id" : { "$oid" : "4dc8" }, "eid" : { "$oid" : "4da" }, "user" : "bob", "text" : "Third comment!!", "dt" : { "$date" : 1304966493240 } } 
] 

Bộ điều khiển:

[HttpGet] 
public JsonResult GetComments(params...) 
{ 
    return Json(new { comments = GetFromDB().ToJson() }, JsonRequestBehavior.AllowGet); 
} 

Sự cố: Tôi đã thử một số cách để lặp lại các hàng. Nhưng tất cả dường như vòng lặp vô hạn.

$.ajax(
     { 
      type: "GET", 
      url: "/comment/GetComments", 
      dataType: "json", 
      data: "app=" + app + "&eid=" + eid + "&pg=" + pg + "&pgs=" + pgs, 
      success: function (result) { 
       $.each(result[comments], function() { 
        $.each(this, function (k, v) { 
         alert('this a column or attribute'); 
        }); 
        alert('end of row'); 
       }); 
      }, 
      error: function (req, status, error) { 
       alert('Error=' + error + ' & Status=' + status); 
      } 
     }); 

Cũng thử:

$.each(result["comments"], function (key, value) { 
    alert('comment found'); 
}); 

Làm thế nào tôi có thể lặp các hàng & truy cập giá trị của mỗi thuộc tính?

+0

những gì hiện ajax gọi cái nhìn của bạn như thế nào? –

+0

vui lòng chỉnh sửa bài đăng của bạn thay vì dán mã trong commment – mcgrailm

+0

bạn đã đăng về cơ bản giống như hôm nay tại: http://stackoverflow.com/questions/5953761/how-do-i-return-json-and-loop-through-the -returned-json-in-jquery-in-mvc-app/5954010 # 5954010 –

Trả lời

4

Bạn chỉ có thể sử dụng một for vòng lặp đơn giản:

for (var i = 0, len = results.length; i < len; i++) { 
    // do something with results[i].text 
} 

See example →


EDIT: Nếu bạn cần phải đầu tiên chuyển đổi một chuỗi JSON để một đối tượng javascript sau đó trước khi vòng lặp, bạn nên:

results = JSON.parse(results); 
+0

Nó hoạt động trong jsfiddle nhưng không hoạt động trên trình duyệt của tôi. alert ('len =' + results.length) in cho tôi tổng số ký tự trong phản hồi json không phải số lượng các mục trong phản hồi. Đó có phải là lý do? Nó đang xử lý json dưới dạng văn bản thuần túy ?? – kheya

+0

JSON là định dạng văn bản: http://www.json.org/ – Tamler

+0

Tôi đã cập nhật câu trả lời của mình. – mVChr

1
$.getJSON("YourControllerHere.XXX",{}, function(data){ 
    $.each(data, function(key, val) { 
     $('#someLocation').append('<li>' + val.text + '</li>'); //This is just an example. You can do something with each row/ value pair here. 
    }); 
}); 

Bạn sẽ có thể duyệt qua các hàng và giá trị bằng cách này.

nhất,

T

1

vấn đề đầu tiên của bạn là không có result["comments"] trường trong JSON của bạn. Bạn đang nhận được một mảng trở lại, của những gì tôi giả định là những ý kiến ​​bản thân. Vì vậy, bạn cần phải lặp lại điều đó. Một cái gì đó như

$.each(result, function(k, v) { console.log(v.user); }); 

sẽ hoạt động, tôi vừa thử nó trong trình duyệt. Các lặp sau mã thông qua các hàng, và sau đó lặp qua các thuộc tính của mỗi hàng:

$.each(foo, function(k, row) { $.each(row, function(attr, value) { console.log(attr, value); }) }); 
1
for(var key in json) 
    for(var key in (obj = json[key])) 
     { 
      //obj holds the current object in the json array 
      console.log(obj[key]); 
     }  
Các vấn đề liên quan