2013-04-08 2 views
1

Я получаю JSON из сервлета и превращаю responseText в объект JSON с помощью JSON.parse(). Инструменты разработчика Chrome показывают объект JSON как имеющий данные, которые я хочу, но когда я на самом деле пытаюсь получить к нему доступ, я просто получаю кучу «неопределенных».JSON Fields Undefined (Javascript)

Я не правильно интерпретирую данные?

Скриншот Chrome Инструменты разработчика: Debug output of JSON Object

И кратко, мой код для вывода данных:

 for (var i = 0, len = jsonObj.length; i < len; ++i) { 
      // Setup the result... 
      var resultRow = document.createElement("tr"); 
      resultsTable.appendChild(resultRow);    
      var result = jsonObj[i]; 

      // Name 
      var coverCell = resultRow.insertCell(0); 
      coverCell.innerHTML = result.name; 
     } 

jsonData, как показано на скриншоте передается в функцию вывода, как jsonObj.

+1

Вместо 'result.name', попробуйте' результат [ '@ имя ']'. Это работает? – cdhowie

+2

На экране разработчика показан объект, называемый 'jsonData', но вы перебираете объект под названием' jsonObj'. Это просто опечатка? – Steve

+0

FYI, даже если вы получаете данные как JSON, после того, как вы его разобрали, вы работаете с объектами и массивами JavaScript, и на данный момент все, что вы делаете, больше не имеет отношения к JSON. Убедитесь, что вы получаете доступ к данным только после их получения, а не заранее. –

ответ

1

Ключ, который вы пытаетесь получить, кажется, имеет символ @ спереди. Поскольку @ символ не является допустимым идентификатором, и поэтому вы не можете использовать точечную нотацию, вы можете получить значение с помощью брекет обозначения:

coverCell.innerHTML = result['@name']; 
0

Если вы получаете json с сервера, то почему вы используете json.parse()? вы должны использовать данные непосредственно как json.

JSON.parse() используется для разбора строки в JSON. Я отвечаю, что ответ с сервера уже является JSON, который может использоваться напрямую без дальнейшего разбора.

и как способ устранения неполадок вы можете использовать console.log для печати объекта.

+1

Я думаю, вы что-то путаете здесь. JSON - это текстовый формат обмена данными, как и XML. Ответ, который вы получаете с сервера, всегда будет текстовым (или двоичным). Вы должны разобрать JSON на собственные JavaScript-объекты/массивы, чтобы работать с ними (так же, как вы анализировали XML в DOM). JSON может существовать только в JavaScript как текст, т. Е. Строки. –

+0

Ответ на jquery post не нужно анализировать в JSON, если сервер возвращает JSON. infact ответ - это объект, а не строка. когда я попытался разобрать его с помощью JSON.parse(), я получаю сообщение об ошибке. Я проверил тип и его объект, а не обычную строку. – MortalViews

+2

Ну, если вы правильно настроили запрос Ajax с помощью jQuery, то он автоматически проанализирует полученный вами JSON. Это не делает мой комментарий недействительным. Ответ, то есть сервер, отправляемый вам через HTTP, по-прежнему является текстом. Кроме того, OP вообще не упоминает jQuery. –