2013-07-20 2 views
0
var test = $.getJSON('data/mydata.json'); 

console.log(test); 
console.log(JSON.stringify(test)); 

Первое утверждение журнала выхода: enter image description here

Вторая строка выводит:

{"readyState":1} 

Что случилось с моими данными? Мне действительно нужно передать функцию, чтобы захватить responseJSON (обратите внимание, что я не работаю над производственным кодом)?

Но главное, это возможно. Я бы не знал, как это сделать, если захочу.

+0

Ajax означает asynchroneus. Да, шаблон дизайна подразумевает, что вы должны дать ему обратный вызов. Там вы просто прочитали файл, чтобы он был достаточно быстрым. Но $ .getJSON возвращает объект jQuery xhr. Не ваши данные. – dievardump

ответ

3

test здесь jQuery XHR объект, а не ваши возвращенные данные. Для того, чтобы получить ваши возвращенные данные, попробуйте:

$.getJSON('data/mydata.json' ,function(data){ 
    console.log(data); 
    console.log(JSON.stringify(data)); 
}); 

или более рекомендуемый способ:

$.getJSON("data/mydata.json").done(function(data) { 
    console.log(data); 
    console.log(JSON.stringify(data)); 
}); 

По JQuery 1.5, все методы Ajax JQuery Возвращение супернабор объекта XMLHttpRequest. Этот объект jQuery XHR, или «jqXHR», , возвращаемый $ .getJSON(), реализует интерфейс Promise, давая ему все свойства, методы и поведение Promise (см. Объект «Отложенные » для получения дополнительной информации). JqXHR.done() (для успеха), jqXHR.fail() (для ошибки) и jqXHR.always() (для завершения, успех или ошибка) методы принимают аргумент функции, который вызывается, когда запрос завершается. Для получения информации о аргументах эта функция принимает , см. Раздел jqXHR Object документа $ .ajax() .

Интерфейс Promise в JQuery 1.5 позволяет также методы Ajax JQuery, в том числе $ .getJSON(), к цепи множественного .done(), .always(), и .fail() обратных вызовов на один запрос, и даже для назначения этих обратных вызовов после завершения запроса. Если запрос уже завершен, обратный вызов запускается немедленно.

Documentation

+0

Да, я знаю это, но как же Firebug может получить доступ к этим свойствам, а в javascript я не могу? Я просто ненавижу парадигму встроенной функции, и даже в примере, который вы даете, я все еще изо всех сил пытаюсь получить данные в переменной во внешней области (мне нужно клонировать ее, я полагаю) – nus

+0

@nus: 'как работает firebug эти свойства, в то время как в javascript я не могу: «Что вы пробовали? Помните, что $ .getJSON - asyn, поэтому, если вы попытаетесь получить доступ к возвращенным данным сразу после этого, данные могут еще не прибыть –

+0

извините за последний комментарий. Очевидно, я не могу просто сбросить его в переменной в outerscope, потому что он асинхронный. Я просто путаюсь с выходом firebug. Является ли firebug искусственным объединением объекта jqXHR? – nus

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