2010-05-22 37 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頁面返回的? – 2010-05-22 09:35:28

+0

哦,沒錯,它不會返回成功警報或錯誤信息。我用我的本地服務器也嘗試過它,結果也一樣。 – Mohammad 2010-05-22 09:47:37

+0

聽起來像另一個SO問題在這裏:http://stackoverflow.com/questions/2380551/jquery-success-function-not-firing-using-jsonp – sirhc 2010-05-22 10:00:19

回答

3

正如Nick Craver所指出的那樣,jQuery調用對於JSONP請求的success回調。

您是否已將回調添加到您的PHP腳本中?

這篇文章請看: http://remysharp.com/2007/10/08/what-is-jsonp/

在你json.php文件,你應該喜歡做一些:

​​3210

由於jQuery的默認JSONP回調callback

這是因爲jQuery追加與隨機字符串名稱的回調(除非您指定其作爲選項jsonpCallbackMore 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回調只是以不同的方式和地點掛鉤,它構造了一個爲此自動命名的臨時函數。默認情況下,成功函數**是**,這個函數也包括'complete'。 http://github.com/jquery/jquery/blob/master/src/ajax.js#L213 – 2010-05-22 10:14:12

+0

你是對的。我已經更新了我的答案。謝謝,尼克! – sirhc 2010-05-22 10:45:12

+0

嗨sirhc,你太棒了,完美的工作! – Mohammad 2010-05-22 11:27:01

0

一個JSON文件的正確內容類型是:

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

這會有問題嗎?

+0

其實我認爲正確的類型是Javascript。 – Mohammad 2010-05-22 09:46:52

+0

否 - 官方文檔聲明它應該是「application/json」。 參見以下內容: - http://www.ietf.org/rfc/rfc4627.txt - http://en.wikipedia.org/wiki/JSON - http://mimeapplication.net/json – 2010-05-22 09:57:53

+0

hmm謝謝,但它不適用於「json」。 – Mohammad 2010-05-22 10:03:10