如何访问从success()返回的返回的jQuery jqxhr对象的属性

时间:2014-05-19 21:47:30

标签: javascript jquery ajax jqxhr

这似乎是最离奇的事情:

var mah_dataz = $.get("link/to/request");
console.log(mah_dataz);

/* result is the whole shebang: 
  Object {
    abort: function (a){var b=a||u;return d&&d.abort(b),c(0,b),this}
    always: function (){return e.done(arguments).fail(arguments),this}
    complete: function (){if(i){var c=i.length;!function f(b){ab.each(b,function(b,c)
    readyState: 4
    ... you get the idea...
    responseText: "{'returns': {'wellFormatted':'JSON', 'cross':'MyHeart'}}" */

但是!

var mah_dataz = $.get("link/to/request");
console.log(mah_dataz.responseText)
// result is: 
// undefined

这很快被标记为重复并被驳回,但没有人甚至完全回答了这个问题,更不用说发布了一个链接到副本。问题是:

为什么是这样的?为什么在第一种情况下返回整个对象,然后,在第二种情况下,当引用其属性时,它是否未定义?我不明白为什么这种对象的行为基本上(或看起来如此表现)与其他javascript对象不同?

1 个答案:

答案 0 :(得分:2)

不完全。 get返回延迟而不是回调的结果

var mah_dataz;
var deferred = $.get("link/to/request", function(jqxhr_ob) { mah_dataz = jqxhr_ob});

如果您刚刚做出回应,那么......

$.get("link/to/request")
    .done(function(response) {
        console.log(response);
    });

哪个更整洁。