2013-11-11 4 views
0

Это мой код:JQuery Ajax() возвращает объект с ошибкой

$("document").ready(function() { 
    var jqxhr = $.ajax({ 
     url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", 
     success: function() { 
      $("#foo").text("second success"); 
     }, 
     error: function (xhr, status, error) { 
      $("#foo").text(JSON.stringify(xhr)); 
     }, 
     complete: function() { 

     } 
    }); 
    }); 

Это разметка:

<body> 
    <div id="foo"></div> 
</body> 

Данные, которые возвращаются (сериализованная и помещают в #foo) является:

{ 
"readyState":0, 
"responseText":"", 
"status":0, 
"statusText":"error" 
} 

У меня нет понятия, что я делаю неправильно. Пожалуйста помоги.

Вот скрипку: http://jsfiddle.net/U2gm9/4/

+0

Я только что перешел на этот URL и не получил никаких ошибок. Блокирован ли flickr.com, где вы находитесь? Что произойдет, если вы введете этот URL-адрес в веб-браузер? – rhughes

+0

Пожалуйста, внимательно прочитайте документацию. Обратный вызов 'error' делает ** не ** получать один аргумент' data'. – Phil

+0

@ Phil - Я знаю это, я положил его только ради удобства. На реальном вызове я бы добавил соответствующие аргументы. – dopatraman

ответ

3

Try установка dataType: 'jsonp'

$("document").ready(function() { 
    var jqxhr = $.ajax({ 
     url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", 
     dataType:'jsonp', 
     success: function() { 
      $("#foo").text("second success"); 
     }, 
     error: function() { 
      $("#foo").text("error"); 
     }, 
     complete: function() { 

     } 
    }) 
}); 

Демо: Fiddle

Использование $.getJSON()

$("document").ready(function() { 
    $.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?').done(function (data) { 
     $("#foo").text("second success"); 
     console.log(data) 
    }).fail(function() { 
     $("#foo").text("error"); 
    }).always(function() {}) 
}); 

Demo: Fiddle

+0

Что делать, если сервер, на который я отправляю запрос, не поддерживает JSONP? – dopatraman

+0

@codeninja, поскольку вы делаете запрос ajax для перекрестного домена, целевой ресурс должен поддерживать jsonp, или если вы хотите поддерживать только современные браузеры, тогда вы можете посмотреть [CORS] (https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS) –

+0

Кажется, что CORS не требует, чтобы я добавлял что-либо к моему вызову ajax ... или я что-то упускаю? Пример в ссылке, которую вы отправили, напоминает то, что у меня выше. – dopatraman

Смежные вопросы