2010-03-16 3 views
3

мой jQuery.ajax возврат объекта JSon. Сначала я читал другие статьи. но их текст ответа мне не нравится. Мой контент Ответ: от ответа Firebugкак манипулировать ответ Json как объект?

{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"} 

Теперь я пытаюсь предупредить COUNTRYNAME:

$('#loadData').click(function() { 
      $.ajax({ 
       type: "POST", 
       url: "WS/myWS.asmx/getDaa", 
       data: "{}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(msg) { 
       $("#jsonResponse").html(msg); 
        $.each(msg.item, function(i, d) { 
         alert(this.country); 
         debugger; 
        }); 
       }, 
      }); 
     }); 

но предупреждает "неопределенными"

+0

Вы пытались просто распечатать одно значение? Как предупреждение (msg.lang)? Оно работает? И почему ваши данные json сбежали? Кроме того, вместо $ .each() использовать для (ключ в msg) {alert (key + ':' + msg [key]); } Посмотрите здесь http://stackoverflow.com/questions/2373524/how-do-i-display-values-of-an-json-object/2373648#2373648 –

ответ

9

Значение элемента является строка. Таким образом, вам сначала нужно разобрать его как json. Попробуй это.

$("#jsonResponse").html(msg); 
    var item = jQuery.parseJSON(msg.item) 
    $.each(item, function(i, d) { 
     alert(this.country); 
     debugger; 
    }); 
}, 
+0

спасибо, с parseJson вы решаете все мои потребности :) – loviji

+2

Обратите внимание, что ваш jquery-вызов ожидает ответа JSON (dataType: «json»), jquery анализирует его для вас. Правильное решение - это * не *, чтобы снова проанализировать его с помощью parseJSON (даже если он работает в этом случае), но для вывода правильного JSON в вашем сценарии «WS/myWS.asmx/getDaa» –

+0

@ David-V: ok. Я анализирую эту проблему. Я использовал метод JSonSerializer() в C# и получил такой результат. – loviji

7
{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"} 
     ^
     | 
     +---- It's a string, not an array ! 

Ваш JSON должен выглядят как

{"item":[ {"country":"USA","lan":"EN"},{"country":"Turkiye","lan":"TR"}]} 

Тогда вы можете получить доступ к нему, как

country = msg.item[0]; 
lang = country.lan; 

for (i=0; i< item.length; i++) { alert (item[i].country); } 

и т.д ...

+0

спасибо за понимание структуры Json – loviji

2

Причина заключается в том, что msg.item является строкой.

Причина, по которой это строка, заключается в том, что начальная двойная кавычка у вас после item:. Это также объясняет, почему ваши двойные кавычки скрываются. У вас есть:

{"item":"[{\"country\":\"USA\",\"lan\":\"EN\"},{\"country\":\"Turkiye\",\"lan\":\"TR\"}]"} 

Когда вы должны иметь:

{"item":[{"country":"USA","lan":"EN"},{"country":"Turkiye","lan":"TR"}]"} 
+0

спасибо, за понимание Json структуры – loviji

Смежные вопросы