2012-11-12 68 views
1

這讓我很困惑。我發送了一個跨域請求,我知道某些即將通過併成功返回,但成功函數並未被解僱。我沒有看到任何警示...

jQuery.getJSON('http://xxxx.appspot.com?callback=?', function(json) { 
    //console.log(json); 
    alert ('text'); 
    }); 

我有幾個跡象表明,要求是全成:

  1. 我的服務器
  2. 我看到的響應代碼和身體在上見網絡選項卡
  3. 當我試圖返回格式錯誤的JSON時,我得到一個錯誤。

但在任何情況下,我得到警報的成功函數

試圖在幾頁,使用不同版本的jQuery。

更新:所以我啓用了標題,仍然完全相同的結果。警報不會觸發。

這是從響應頭:

HTTP/1.1 200 OK 
Content-Type: application/json; charset=ISO-8859-1 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, OPTIONS 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Headers: Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Date: Mon, 12 Nov 2012 12:30:02 GMT 
Server: Google Frontend 
Cache-Control: private 
Content-Length: 36 
+0

你可以分享你的json,它已被返回迴應。 – yogi

+0

我剛剛看到您的更新與響應標題。請看看我的編輯。 –

回答

1

當你清楚的看到,這是一個跨域請求,我想你知道至少有一點the same origin policy

總之,如果您沒有在appspot.com服務器上設置the appropriate CORS headers,那麼瀏覽器沒有理由允許腳本分析結果。好消息是,幾乎所有的服務器端語言,it's very easy to add the relevant headers。當然,這意味着您可以更改服務器(或者瀏覽器將其視爲服務器,它可能是代理服務器)。


編輯:

我注意到,剛纔在你們所說的URL callback=?。這意味着您使用JSONP調用服務,而不是JSON(跨域問題的過時解決方案)。由於它不適用於回調語法,並且響應標頭包含application/json,因此您可以嘗試查看它是否處理普通json。在網址末尾嘗試不使用?callback=?

+0

我刪除了參數,仍然是相同的結果。警報不會觸發 –

0

當談到CORS(跨源資源共享)時,它全部是關於標題。

這真的很重要您的請求標題和答案標題是正確的,否則將無法正常工作。

如果您的請求標頭不正確,請求將被服務器無情地終止。 如果答案標題不正確,瀏覽器客戶端將忽略該答案。

在回答你會發現下面的標題子集:

  • 訪問控制允許來源
  • 訪問控制允許的憑據
  • 訪問控制允許的方法
  • 接入控制允許集管

所有的起源,方法和由所述請求中使用報頭必須被允許在服務器上答案或將被忽略。

例如:

Access-Control-Allow-Origin *; 
Access-Control-Allow-Credentials true; 
Access-Control-Allow-Methods GET, POST, OPTIONS, PUT, DELETE; 
Access-Control-Allow-Headers Origin,SOAPserver,SOAPaction,Method,Accept,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type; 

如果沒有更多的相關信息,我不能更多有用的:)

+0

我添加了這些標題,但仍然出現同樣的問題 –

+0

您是否也可以共享請求標題? 您是否已經嘗試使用$ .ajax而不是$ .getJSON? 根據我的經驗,我使用$ .ajax,遇到的唯一問題是請求/回答標題。 – KingRial

0

添加這個問題,以及

Access-Control-Max-Age: 3600

同時,檢查Access-Control-Request-Method瀏覽器請求。