2011-05-10 19 views
7

Powiel możliwe:
How do I return JSON and loop through the returned json in jQuery in MVC app?Jak zapętlić dane JSON zwrócone przez jquery?

To moje dane zwracane przez kontrolera MVC i mam to w moim sukcesie zwrotnego:

[{ "_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 } } 
] 

Kontroler:

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

Problem: Próbowałem kilka sposobów pętli wierszy. Ale wszystko wydaje się nieskończoną pętlą.

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

próbował również:

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

Jak mogę pętli wiersze & dostępu wartość każdego atrybutu?

+0

co robi swój ajax połączeń wyglądać? –

+0

edytuj swój wpis, zamiast wklejać kod w commem – mcgrailm

+0

opublikowałeś zasadniczo to samo dzisiaj na: http://stackoverflow.com/questions/5953761/how-do-i-return-json-and-loop-through-the -release-json-in-jquery-in-mvc-app/5954010 # 5954010 –

Odpowiedz

4

Można po prostu użyć prostego for pętlę:

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

See example →


EDIT: Jeśli trzeba najpierw przekonwertować ciąg JSON do obiektu JavaScript następnie przed pętli należy:

results = JSON.parse(results); 
+0

Działa w jsfiddle, ale nie w mojej przeglądarce. alert ('len =' + results.length) drukuje mi całkowitą liczbę znaków w odpowiedzi jsona, a nie liczbę elementów w odpowiedzi. Czy to jest powód? Traktuje json jako zwykły tekst? – kheya

+0

JSON to format tekstowy: http://www.json.org/ – Tamler

+0

Zaktualizowałem moją odpowiedź. – 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. 
    }); 
}); 

Powinieneś być w stanie przejść przez te wiersze i wartości.

Best,

T

1

Pierwszym problemem jest to, że nie ma result["comments"] pola w JSON. Otrzymujesz tablicę z powrotem, z tego co zakładam, to same komentarze. Musisz więc to powtórzyć. Coś takiego jak powinno działać, po prostu wypróbowałem to w przeglądarce. Poniższe iteracje kod poprzez wiersze, a następnie dokonuje iteracji atrybutów każdego wiersza:

$.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]); 
     }  
Powiązane problemy