2015-05-12 2 views
0

У меня возникли проблемы с доступом к данным JSON с вызовом AJAX.Проблемы с доступом к данным JSON

JSON

{ 
    "Ongoing": [ 
     {"name": "meh"}, 
     {"name": "hem"} 
    ], 
    "Completed": [ 
     {"name": "kfg"}, 
     {"name": "dkfgd"} 
    ] 
} 

JS

$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "script/projects.json", 
    complete: function(data){ 
     for(var i = 0; i < data.Ongoing.length; i++){ 
      console.log(data.Ongoing[i].name); 
     } 

    } 
}) 

Когда я пишу в консоль, я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'length' of undefined

Так по какой-то причине это откидывающее что массив не определен.

Я передал JSON в валидатор, поэтому я знаю, что это действительно JSON. Я знаю, что jQuery $.ajax автоматически анализирует JSON. Поэтому я смущен, я должен иметь доступ к данным, как обычный объект. Может ли кто-нибудь объяснить мне, что я сделал неправильно, и дать объяснение, как это исправить?

На следующем рисунке показано, как просто писать data на консольные дисплеи. enter image description here

+3

Можете ли вы сделать консольный журнал только «данных», чтобы увидеть, что он содержит? – zpr

+0

Несомненно. Я добавлю скриншот к вопросу, чтобы показать, что пишет только данные. –

+0

не может сделать это с помощью 'file: //' см. Мой ответ –

ответ

0

Вы должны загрузить файл через веб-сервер, вы загружаете его с помощью file:// однако вы можете изменить это в Chrome с помощью --allow-file-access-from-files пометки

посмотреть: Trying to load local JSON file to show data in a html page using JQuery

+0

Забыл Мне нужно было делать это на сервере. Тем не менее, я все еще не могу получить доступ к данным. Я уточню вопрос. –

+0

does 'projects.json' существуют в том же каталоге, что и страница? –

+0

Да, это так, и я заметил, что путь был неправильным, поэтому я исправил его. –

0

Вашего Ongoing массив, поэтому у вас есть первый доступ к элементу:

console.log(data.Ongoing[0].name); 
+1

Это правильно, но TypeError поражает 'data.Ongoing', поэтому он даже не добирается так далеко. – zpr

0

Ваши Ongoing свойства содержит массив

"Ongoing": [ {"name": "meh"}, {"name": "hem"} ]

Чтобы получить доступ, который вы можете сделать это путем петли

$.each(data.Ongoing, function(index, value) { 
    console.log(value.name); 
}); 
+0

Не просто ли выполнение цикла for выполняет одно и то же? –

+0

@ Robert да, вы могли бы это сделать и в цикле for –

0

код хорош. Ваша проблема в запросе. Проверьте URL-адрес

+0

URL-адрес правильный. –

+0

может добавить ответ на запрос? – julian

+0

Это действительно разрешилось. –