2012-06-05 66 views
4

我正在對外部服務器進行$ .ajax調用。此服務器返回重定向,重定向頁面返回一些json。這在FF和Chrome上運行良好,但Safari和Opera不喜歡它。Safari jquery ajax重定向

這裏是我的$阿賈克斯代碼:

$.ajax(
{ 
    url:url, 
    dataType:"json", 
    success:function(data) 
    { 
     console.log("success"); 
    }, 
    complete:function() 
    { 
     console.log("complete"); 
    } 
}); 

在Firefox和Chrome,這工作正常 - '成功' 被稱爲我的每個Ajax響應。然而在狩獵和歌劇中,「成功」從來不叫,只有「完整」。網絡請求控制檯向我提供以下信息:

resolve.json GET 302 application/json 
1817995.json GET (canceled) undefined 

其中1717995.json是從resolve.json發送的重定向。我不知道爲什麼這個請求被取消了(就好像被響應所指示)。

任何人都可以提供一些幫助嗎?

+0

你所說的「外部服務器」的意思是這樣的跨域請求? – Gavriel

+0

是的,它是跨域的。我從soundcloud.com獲取JSON數據。如果我直接ping第二個URL(1817995.json),它可以工作,但是當它是重定向時,它不起作用。 – Jaypan

+0

我也剛剛遇到了這個問題:使用重定向的跨域後期。我也發現它適用於Chrome和IE,但不適用於Safari。但是,當我知道服務器在重定向和結束頁面上正確設置「access-control-allow-origin:*」標題時,無論如何,JSONP解決它謝謝。 – Daniel

回答

1

恕我直言,這是一個跨域(原產地)問題。您的瀏覽器默認不會跨瀏覽器ajax請求。你應該嘗試改用JSON的JSONP:

dataType:"jsonp" 

但如果有對JSONP服務器的支持(在這種情況下,你還需要指定回調函數的名字)纔會工作。

如果jsonp不受支持,您可以從您的服務器進行代理。基本上它甚至不需要。而不是重定向只是從第三方服務器「下載」文件並將其作爲響應輸出。

是否確定,這將僅較新的瀏覽器,那麼你可以嘗試this(這是更好的解決方案,然後在服務器端「代理」恕我直言)

+0

'dataType:「jsonp」'爲我工作,謝謝! – Dol