请解释这个神秘的$ .getJSON行为

时间:2013-07-20 00:44:10

标签: javascript json jquery firebug

var test = $.getJSON( 'data/mydata.json' );

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

第一个日志语句输出: enter image description here

第二行输出:

{"readyState":1}

我的数据发生了什么变化?我是否真的必须传递一个函数才能获取responseJSON(注意我没有使用生产代码)?

但最重要的是,这是可能的吗?如果我愿意,我不知道如何做这样的事情。

1 个答案:

答案 0 :(得分: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开始,所有jQuery的Ajax方法都返回了一个超集   XMLHTTPRequest对象。这个jQuery XHR对象,或“jqXHR”,   $ .getJSON()返回实现Promise接口,给它   Promise的所有属性,方法和行为(请参阅Deferred   对象获取更多信息)。 jqXHR.done()(成功),   jqXHR.fail()(用于错误)和jqXHR.always()(用于完成,是否   成功或错误)方法采用在何时调用的函数参数   请求终止。有关这个论点的信息   函数接收,请参阅$ .ajax()的jqXHR对象部分   文档。

     

jQuery 1.5中的Promise接口也允许使用jQuery的Ajax方法,   包括$ .getJSON(),链接多个.done(),. aways()和   .fail()对单个请求进行回调,甚至分配这些回调   请求可能已完成后的回调。如果请求是   已经完成,回调立即被触发。

Documentation