Tengo el siguiente JSON devuelto en una variable llamada de datos.

ESTE ES EL JSON QUE OBTIENE REGRESÓ…

[ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "jjjjjjj"}
]

y estoy tratando de bucle a través de la colección utilizando $.cada uno, pero estoy ejecutando en problemas donde la alerta se muestra indefinido. He intentado un montón de diferentes sintaxis, pero parece que no puede entender esto.

El JQuery que estoy usando es

$.each(data, function(i, item) {
    alert(item.PageName);
});

Puede cualquiera me apunte en la dirección correcta?

EDITAR
Este es el código que estoy utilizando para agarrar los datos

$.getJSON('/Cms/GetPages/123', null, function(data) {
  fillSelect(data);
});

y esta es la función que se llama a volver a llamar

function fillSelect(data) {
  alert(data);
  $.each(data, function(i, item) {
    alert(item.PageName);
  });
}

EDITAR 2
Esto es un poco confuso mí, de acuerdo a la documentación que debería funcionar como lo tengo, pero no es así. Según el violinista en el encabezado de la muestra:-

Content-Type: application/json; charset=utf-8

y el JSON es exactamente correcto anteriormente. Yo estoy usando el chrome si esto te hace diferente. Pondrá a prueba en IE y FF….

EDITAR 3

usando $.obtener produce

"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10056,\r\n \"PageName\": \"fdgdfgdfg\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10052,\r\n \"PageName\": \"hjkhjk\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10059,\r\n \"PageName\": \"jjjjjjj\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10057,\r\n \"PageName\": \"qqqqq\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10054,\r\n \"PageName\": \"qwqw\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n }\r\n]"
  • A mí me funciona. Asegúrese de que los datos se transmiten correctamente a cada método.
InformationsquelleAutor Rippo | 2010-02-26

4 Comentarios

  1. 287
    var data = [ 
     {"Id": 10004, "PageName": "club"}, 
     {"Id": 10040, "PageName": "qaz"}, 
     {"Id": 10059, "PageName": "jjjjjjj"}
    ];
    
    $.each(data, function(i, item) {
        alert(data[i].PageName);
    });
    
    $.each(data, function(i, item) {
        alert(item.PageName);
    });

    estas dos opciones de trabajo, a menos que usted tiene algo así como:

    var data.result = [ 
     {"Id": 10004, "PageName": "club"}, 
     {"Id": 10040, "PageName": "qaz"}, 
     {"Id": 10059, "PageName": "jjjjjjj"}
    ];
    
    $.each(data.result, function(i, item) {
        alert(data.result[i].PageName);
    });

    EDICIÓN:

    intente con este y describe lo que el resultado

    $.get('/Cms/GetPages/123', function(data) {
      alert(data);
    });

    PARA EDITAR 3:

    esto soluciona el problema, pero no la idea de usar el «eval», habría que ver cómo está la respuesta en ‘/Cms/GetPages/123’.

    $.get('/Cms/GetPages/123', function(data) {
      $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
       alert(item.PageName);
      });
    });
    • Parece que sea necesario para agregar eval(data)
    • en la función «httpData» en jQuery se puede ver el nombre de la ventana[«eval»] para los datos json. usted no necesita usar eval. esta línea «$. get ( ‘/ Cms/GetPages/123′» es para mostrar que están recibiendo en «datos».
    • james.padolsey.com/jquery/#v=1.3.2&fn=jQuery.ajax james.padolsey.com/jquery/#v=1.3.2&fn=jQuery.httpData
    • Han actualizado la respuesta (ver EDICIÓN 3) para mostrar lo que $.get produce
    • ¿cómo estás de devolver los datos en «/ Cms/GetPages/123»?
    • Básicamente es un asp.net proyecto de mvc usando nhibernate. De hecho, estoy usando el Newtonsoft.Json dll y principal de la executeResult el uso de la JSonTextWriter y JsonSerializer clases.
    • $.each obras para el primer índice no para la segunda, mi objeto json es { "0":{"tech_id":"35","tech_name":"Ajax"}, "1":{"tech_id":"36","tech_name":"Ajax"} }

  2. 16

    Han convierte los datos de cadena de caracteres a objeto de JavaScript?

    Usted puede hacerlo con data = eval('(' + string_data + ')'); o, lo que es más seguro, data = JSON.parse(string_data); pero más tarde sólo funciona en FF 3.5 o si incluye json2.js

    jQuery desde 1.4.1 también tiene una función para que, $.parseJSON().

    Pero, en realidad, $.getJSON() debe dar a usted ya analiza un objeto json, por lo que debe comprobar exhaustivamente todo, no es pequeño error enterrado en algún lugar, como es posible que haya olvidado citar algo en json, o uno de los soportes de la falta.

    • Parece que necesita para agregar fillselect(eval(data));
    • Por CIERTO, ¿cómo es compatible eval?
    • Que debe ser data = eval('('+string_data+')');. También, jQuery tiene otra función data = jQuery.parseJSON(string_data);
    • Hay algo que no está bien. sólo eval(data) obras. Por favor, ver mi EDICIÓN 2
    • gracias, respuesta actualizada
    • He visto jQuery.parseJSON(string_data) fallar en ciertos casos, cuando los datos = eval(‘(‘+string_data+’)’) funciona bien.

  3. 4

    getJSON evaluará los datos en JSON para usted, siempre y cuando el contenido correcto-se utiliza el tipo. Asegúrese de que el servidor devuelve los datos como application/json.

    • de acuerdo a fiddler el tipo de contenido es Content-Type: application/json; charset=utf-8

Dejar respuesta

Please enter your comment!
Please enter your name here