2013-02-11 3 views
0

Не уверен, что мне здесь не хватает, если вы посмотрите на этот код - вы увидите, что я делаю вызов jsonp для flickr и получаю успешный ответ. Однако jQuery всегда вызывает метод «fail», а не метод успеха.Почему jQuery говорит, что мой вызов ajax jsonp не работает?

Почему?

{{}} EDITED

$.ajax({ 
     url: 'http://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=fun&tagmode=any', 
     dataType: 'jsonp' 
    }) 
    .done(function(data, status) { 
    console.log('data count:', data.query.results.json.json.length); 
    $('#result-count').text(JSON.stringify(data.query.results.json.json)); 
    }) 
    .fail(function(xhr, err) { 
    console.log('Sample of error data:', err); 
    console.log("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\nresponseText: "+xhr.responseText); }); 
    }); 
+1

Почему 'async: false'? Вот что значит 'A' в' AJAX'! –

ответ

2

Это неудачу, потому что вы используете неправильный JSONP обратный вызов.

... 
type: 'GET', 
jsonpCallback: 'jsonFlickrFeed' 
... 

также, в последних версиях JQuery, JSONP запросы не вызвать fail обратного вызова по ошибке, async:false игнорируется для запросов JSONP и crossDomain не надо (JQuery устанавливает, что для вас).

+0

Привет, yeh, я пытался изменить имя функции обратного вызова, но я вижу, как это не может работать. Поэтому, если flickr возвращает действительный ответ jsonp, тогда почему вызов call FAIL всегда вызывается? – TylerNZ

+0

Я не знаю, что говорит вам третий аргумент? что вы получаете в консоли? Вся информация находится прямо в вашем браузере, вам просто нужно получить к ней доступ. 'console.log (arguments)' внутри '.fail', он даст вам 3 аргумента, третий, скорее всего, будет« parseerror », указывающий, что возвращенный jsonp не был тем, что ожидало его jQuery. Однако это может быть не очень полезно из-за характера отправки jsonp-запросов. Если это не удается, вы действительно должны получать ошибку javascript в своей консоли. –

+0

@TylerNZ Также см. Править. Вы не можете POST jsonp. –