2010-05-22 2 views
0

Это мой код,JQuery Ajax ответ не вызывает успех

$.ajax({ 
      type:"get", 

      //this doesn't work 
      //url:'http://example.com/json.php', 

      //But this works 
      url:'http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?', 

      dataType:"jsonp", 
      success:function(data){ 
       alert('success'); 
      }, 
      error:function(){ 
       alert('error'); 
      } 
}); 

в json.php У меня есть

<?php 
header("Content-type: application/javascript"); 
?> 

Затем я скопировал всю продукцию этого FLICKR URL. Поэтому проблема не должна заключаться в содержании моего кода, а в том, как он отправляется. Что мне нужно исправить здесь?

Заранее благодарен!

+0

Вы говорите, что это не работает, но что он делает? Что возвращается с вашей php-страницы? –

+0

О, ну, он ничего не делает, он не возвращает ни предупреждения о победе, ни ошибки. Я попробовал это с моим локальным сервером также с теми же результатами. – Mohammad

+0

Звучит как еще один вопрос: здесь http://stackoverflow.com/questions/2380551/jquery-success-function-not-firing-using-jsonp – sirhc

ответ

3

jQuery вызывает обратный вызов success для запросов JSONP, как указал Ник Крейвер.

Вы добавили обратный вызов в свой PHP-скрипт?

Посмотрите на эту статью: http://remysharp.com/2007/10/08/what-is-jsonp/

В файле json.php, вы должны делать что-то вроде:

<?php 
$jsonstuff = '{ something: "somethingHere" }'; 
echo $_GET['callback'] . "(" . $jsonstuff . ")"; 
?> 

Поскольку по умолчанию JSONP обратного вызова JQuery является callback.

Это потому, что JQuery добавляет обратный вызов с произвольным именем строки (если не указывать его как jsonpCallback в опциях. More information can be found in the documentation. Вы не будете видеть обратный вызов добавляется, потому что это не является частью URL, он добавил JQuery только . во время выполнения метода $.ajax

Вы можете увидеть, что я имею в виду, пытаясь:. http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=myCallBackHandler

Если обработчик не выполняется, JQuery не вызывает успех и полные обработчики, указанные в $.ajax опции

+2

Это неточно, обратный вызов jsonp просто подключен по-другому и помещается, он создает для него временную функцию авто-именования. Функция 'success' ** - это **, по умолчанию, этот обратный вызов (в том числе и' complete'). http://github.com/jquery/jquery/blob/master/src/ajax.js#L213 –

+0

Вы правы. С тех пор я обновил свой ответ. Спасибо, Ник! – sirhc

+0

Привет, сирх, ты блестящий, который отлично работал! – Mohammad

0

Правильный Content-тип для файла JSON является:

header('Content-type: application/json'); 

Может ли это быть проблема?

+0

На самом деле, я считаю, что правильным типом является Javascript. – Mohammad

+0

Нет - в официальной документации указано, что это должно быть «application/json». См. Следующее: - http://www.ietf.org/rfc/rfc4627.txt - http://en.wikipedia.org/wiki/JSON - http://mimeapplication.net/json –

+0

hmm спасибо, но он не работает с «json». – Mohammad