Как получить доступ к свойствам возвращенного объекта jQuery jqxhr, если он возвращен из sucess()

Это кажется самой странной вещью:

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 ответ

Решение

Не совсем. 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);
    });

Что еще аккуратнее.

Другие вопросы по тегам