2015-04-03 2 views
0

Может ли кто-нибудь рассказать мне, как я могу получить доступ к данным JSON с помощью JavaScript? Я попробовал это с петлей $.each, попытался получить доступ с помощью [0], но все вернулось undefined.Обработка данных JSON с использованием JavaScript

JSON данные контроллера:

{ 
    "workers": { 
     "107": "Lisa", 
     "96": "Marvin", 
     "24": "Michael", 
     "23": "Patrick", 
     "116": "Peter" 
    } 
} 

Ajax вызовов:

$.ajax({ 
    url: '/cake/workers/getWorkersAsJSON.json', 
    async: true, 
    success: function(data) { 
     // process 
    } 
}); 

ответ

1

Вам нужно добавить dataType: 'json'

$.ajax({ 
    url: '/cake/workers/getWorkersAsJSON.json', 
    async: true, 
    dataType: 'json', 
    success: function(data) { 
     $.each(data.workers, function(i, v) { 
      console.log(i + ' : ' + v); 
     }) 
    } 
}); 

Указание типа данных в формате JSON затем преобразовать его в JavaScript объект, и вы можете прокручивать его с помощью $.each или вызывать i непосредственно с помощью . в качестве разделителя. Приведен пример выше.

FYI: вам не нужно указывать async: true, потому что по умолчанию это правда.

+0

Я уже указываю расширение JSON, когда я вызываю метод контроллера. Оба они не нужны. Ваше решение сработало, спасибо за это! Я принимаю это сейчас! – doonot

0

Попробуйте

var obj = $.parseJSON(data); 

в вашей success функции.

0

Он не похож на массив, поэтому не уверен, что его можно обработать с помощью цикла «каждый» (см. Определение массива JSON здесь). Скорее всего, это будет доступно, как

data.workers.107 

Если не простой способ понять структуру, чтобы установить точку останова в Ajax обратного вызова и проверить структуру объекта JavaScript.

+0

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

1

На самом деле есть jQuery короткая рука $.ajax datatype:json. Функция называется getJSON

В вашем примере, это будет осуществляться следующим образом:

$.getJSON("/cake/workers/getWorkersAsJSON.json", function(data) { 
console.log(data); 
}); 

Это было бы получить JSON, и приступить к регистрировать полученные данные в виде массива в консоли.

Источник: http://api.jquery.com/jquery.getjson/

0

Используя проект с открытым исходным кодом jinqJs

Вы можете сделать синхронизации вызова, как это, чтобы получить объект JSON:

var result = jinqJs().from('/cake/workers/getWorkersAsJSON.json').select(); 

асинхронный способ доступа к нему:

var result; 
    jinqJs().from('/cake/workers/getWorkersAsJSON.json', function(self) { 
     result = self.select(); 
}); 
+0

Если он уже использует jQuery, каковы будут преимущества использования jinqJs? – Pachonk

+0

Потому что он может затем делать на нем выражения LINQ, например, groupBy(), .where() и т. Д. – NYTom

+1

Почему кто-то не использует .net-уход для использования linq ... Lol – cchamberlain

1

Привет, пожалуйста, проверьте приведенный ниже c ода. Вы отправляете объект, поэтому вам нужно получить доступ к данным с помощью ключей.

$.ajax({ 
    url: '/cake/workers/getWorkersAsJSON.json', 
    async: true, 
    success: function(data) { 
     console.log(data.workers.107) // should show "Lisa" 
     //if you need to use loop, try these 
     var keys = Object.keys(data.workers); 

     for(var key in keys){ 
      console.log(data.workers[key]); 
     } 
    } 
}); 
+0

Спасибо, Sohel, но это все еще показало 'undefined' в консоли. – doonot

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