2013-10-31 121 views
0

我在我的JS執行以下內容。錯誤回調沒有任何錯誤

var url = ...; 
$.ajax({ 
    url: url, 
    error: function(p1, p2) { alert(p2); } 
}); 

我得到的文本錯誤但是當我檢查FF的控制檯,它會列出調用指定爲200 OK地址。看來我得到一個錯誤,因爲成功雖然沒有被調用。

  1. 這怎麼可能?
  2. 我在哪裏可以檢查錯誤的信息(我看到狀態()說:拒絕)?
+0

向函數中添加第三個參數,它應該包含錯誤消息 – Snowburnt

+0

@Snowburnt Nope。它說*未定義*。 –

回答

1

這是跨域請求失敗的結果。

在網絡層面上,請求成功(這就是爲什麼Firefox會給你顯示一個200 OK響應),但是相同的原始策略(SOP)會觸發錯誤並阻止JavaScript讀取響應。

如果你想請求成功,或者:

  • 有請求的服務器服務於您的請求起源適當Access-Control-Allow-Origin頭。 (只有當您控制目標服務器時纔可能)。

  • 使用JSONP:讓服務器以腳本格式向您發送數據,讓您的客戶端以<script>標記運行它。你自己的服務器(同樣,目標服務器必須已經支持這一點。)

  • 設置以代理HTTP請求和轉發響應腳本:

    Client Ajax ==> Your server (allowed by SOP) ==> Target resource 
    

    注意,這不會轉發餅乾,所以如果traget資源需要認證,那麼認證將失敗。

+0

再次染指CORS。 JSONP是唯一的解決方法嗎? –

+0

@KonradViltersten你控制所請求的服務器嗎? JSONP需要服務器端代碼,所以如果服務器尚未實現它,則需要添加它。 (如果你有能力實現它,爲什麼不添加CORS頭文件?)如果你不控制目標服務器,你可以使用另一個你控制的服務器(並且SOP允許*)*充當代理人。 – apsillers

+0

在目前的情況下,我沒有太大的控制。而且,更糟糕的是,我無法按照建議的方式進行設計。我開始擔心,我將無法使用我擁有的工具來構建我需要的東西...... –