Как получить значение объекта по ключу в javascript?

Я получаю данные, используя var result = $.getJSON.

Когда я console.log(результат); Я получаю этот объект:

Object
    abort: function (a){a=a||"abort",p&&p.abort(a),w(0,a);return this}
    always: function (){i.done.apply(i,arguments).fail.apply(i,arguments);return this}
    complete: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    done: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    error: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    fail: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    getAllResponseHeaders: function (){return s===2?n:null}
    getResponseHeader: function (a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c}
    isRejected: function (){return!!e}
    isResolved: function (){return!!e}
    overrideMimeType: function (a){s||(d.mimeType=a);return this}
    pipe: function (a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()}
    progress: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    promise: function (a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}
    readyState: 4
    responseText: "{'result':'success'}"
    setRequestHeader: function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this}
    state: function (){return e}
    status: 200
    statusCode: function (a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this}
    statusText: "OK"
    success: function (){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this}
    then: function (a,b,c){i.done(a).fail(b).progress(c);return this}
__proto__: Object

Как получить значение для ключа statusText? (что в данном случае "хорошо");

Я пробовал console.log(result.statusText) и console.log(result['statusText'], но оба возвращаются как неопределенные. Что дает?

РЕДАКТИРОВАТЬ: Вот фактический код, который я использую.

 $j(".buyNowButton").click(function(){
      var qty = $j(this).attr('qty');
      var product_id = $j(this).attr("product_id");

      var params = "product_id=" + product_id + "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;qty=" + qty;        

      var result = $j.getJSON("/acumen/scripts/addToCart.php", params, function(data, textStatus){
            console.log(textStatus);
           if (textStatus == "error"){
                alert("There was an error adding this item to your cart.  Please call customer service for assistance.", "Error");
                return;
           };
           if (data.result == "error"){
                alert("Sorry, an error occurred while adding the item to your cart.  The error was: '" + data.message + "'");
                return;
           };
      }); 
      console.log(result);
 });

person andrew nguyen    schedule 20.07.2012    source источник
comment
На самом деле это result.statusText. Вам нужно будет опубликовать код, который вы используете, чтобы кто-нибудь помог.   -  person Pointy    schedule 20.07.2012
comment
developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects   -  person jbabey    schedule 20.07.2012


Ответы (3)


Похоже, вы неправильно используете объект. Когда вы используете console.log(result), единственная причина, по которой вы видите текст результата, заключается в том, что консоль Firebug обновляет эталонные значения. Если вы попытаетесь получить доступ к result.statusText в коде в той же строке, вы не получите своего результата, потому что запрос, вероятно, еще не завершен.

Эта строка:

var result = $.getJSON

Дает вам сам объект запроса. Если вы хотите иметь дело с ответом, вы делаете это в функции обратного вызова:

$.getJSON('request/url/goes/here', request_data, function(result) {
    // this is where you do something with your json data
});

... понимая, что getJson - это "быстрый псевдоним" для этого:

$.ajax({
  url:'request/url/goes/here',
  dataType: 'json',
  data: request_data,
  success: function (result) {
      // this is where you do something with your json data
  }
});

Вы говорите, что ответом является текст «ок»; Я бы посоветовал вам не использовать getJson, так как ожидается, что ответ будет данными json. Вместо:

$.ajax({
  url:'request/url/goes/here',
  data: request_data,
  success: function (result) {
      // this is where you do something with your response string "ok"
  }
});

.. обратите внимание, что я не указываю тип данных обратного вызова как json. jQuery автоматически обнаружит его.

Документация

person Chris Baker    schedule 20.07.2012

Это просто:

result.statusText
person peacemaker    schedule 20.07.2012

ваша переменная result представляет собой обещание, которое возвращает $.getJSON(), а не ваши данные JSON. Вам нужно использовать обратный вызов успеха.

Вот простой пример использования getJSON:

http://www.jquery4u.com/json/ajaxjquery-getjson-simple/

person jbabey    schedule 20.07.2012