jQuery $ .get возвращает полный объект против того, что мне нужно - PullRequest
3 голосов
/ 17 октября 2011

Вот мой код:

var source;
source = $.getJSON(url, function(json) {
  return console.log(json);
});

Вышеприведенное возвращает полный объект jQuery против JSON, который я запрашивал. Ответ выглядит примерно так:

abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
isRejected: function () {
isResolved: function () {
overrideMimeType: function ( type ) {
pipe: function ( fnDone, fnFail ) {
promise: function ( obj ) {
readyState: 4
responseText: "{'Hello':'World'}"
setRequestHeader: function ( name, value ) {
status: 200
statusCode: function ( map ) {
statusText: "OK"
success: function () {
then: function ( doneCallbacks, failCallbacks ) {
__proto__: Object

Кто-нибудь знает, что я делаю не так? Я занимаюсь этим уже пару часов: (

Ответы [ 3 ]

6 голосов
/ 17 октября 2011

AJAX является асинхронным, source не может сравниться с запрашиваемым JSON, поскольку он еще не доступен. jQuery.getJSON вернет объект jqXHR, который он создает для обработки запроса , а затем убегает и получает ответ.

$.getJSON(url, function(json) {
  // deal with response  here
});

После получения ответа ( через некоторое время ) выполняется обратный вызов (функция, которую вы передаете), поэтому вы можете получить доступ к ответу через первый параметр (который вы называется json).

Вы можете увидеть это, попробовав следующее:

console.log('1');

$.getJSON(url, function(json) {
    console.log('2');
});

console.log('3');

Вы увидите, что ваша консоль будет читать 1, 3, а затем через доли секунды (т.е. время выполнения HTTP-запроса), 2; Это показывает, что ответ getJSON возвращается без завершения, скрипт продолжает выполняться, а затем вызывается обратный вызов через некоторое время .

0 голосов
/ 17 октября 2011

Начиная с jQuery 1.5, этот метод возвращает объект jqXHR (то, что вы видите).См. Документы здесь для получения дополнительной информации.

Вы можете видеть, что нужный вам JSON находится в переменной responseText.Так и должно быть source.responseText.

0 голосов
/ 17 октября 2011

Попробуйте сделать это так:

var source;
source = $.get(url, function(data) {
  return alert($.parseJSON(data));
});
...