2011-05-10 21 views
7

Duplicar posible:
How do I return JSON and loop through the returned json in jQuery in MVC app?¿Cómo realizo un ciclo de datos JSON devueltos por jquery?

Ésta es mis datos devueltos por el controlador MVC y me sale esto en mi devolución de llamada de éxito:

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

controlador:

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

Problema: Intenté varias formas de recorrer las filas. Pero todo parece un ciclo infinito.

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

También probamos:

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

¿Cómo puedo bucle de las filas de acceso & valor de cada atributo?

+0

lo que hace su mirada como llamada AJAX? –

+0

edite su publicación en lugar de pegar el código en el comentario – mcgrailm

+0

que publicó básicamente lo mismo hoy en: http://stackoverflow.com/questions/5953761/how-do-i-return-json-and-loop-through-the -returned-json-in-jquery-in-mvc-app/5954010 # 5954010 –

Respuesta

4

Se podía usar un simple for bucle:

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

See example →


EDIT: Si es necesario convertir primero una cadena JSON en un objeto Javascript a continuación, antes de que el bucle se debe:

results = JSON.parse(results); 
+0

Funciona en jsfiddle pero no en mi navegador. alert ('len =' + results.length) me imprime los caracteres totales en la respuesta json, no la cantidad de elementos en la respuesta. ¿Esa es la razón? ¿Está tratando a json como texto sin formato? – kheya

+0

JSON es un formato de texto: http://www.json.org/ – Tamler

+0

Actualicé mi respuesta. – 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. 
    }); 
}); 

Debería poder recorrer las filas y los valores con esto.

mejor,

T

1

Su primer problema es que no hay result["comments"] campo en su JSON. Estás recibiendo una matriz, de lo que supongo que son los comentarios en sí mismos. Entonces necesitas iterar sobre eso. Algo así como

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

debería funcionar, acabo de intentarlo en el navegador. El código siguiente itera a través de las filas, y luego itera a través de los atributos de cada fila:

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