2014-12-02 45 views
1

阿賈克斯不僅僅在iPad在iPad上

Sended! 
Completed with status: timeout; 
Error: timeout 

警報在IE瀏覽器

$.ajax({ 
    url   : 'http://www.othersite.com/GetUrl?Callback=?', 
    dataType : 'json', 
    contentType : 'application/json; charset=utf-8', 
    type  : 'GET', 
    timeout  : 5000, 
    cache  : false, 
    crossDomain : true, 
    async  : true, 
    data  : { id : 100, noCache : new Date().getTime() }, 
    beforeSend : function(XMLHttpRequest) { alert('Sended!'); }, 
    complete : function(XMLHttpRequest, textStatus) { alert('Completed with status: ' + textStatus) }, 
    success  : function(data){ alert('Success with response:' + data.response); }, 
    error  : function(xhr, textStatus, errorThrown){ alert('Error: ' + textStatus); } 
}); 

警報(7,8,9 ,10,11),火狐,Chrome,歌劇,Safari桌面

Sended! 
Completed with status: success 
Success with response: http://www.google.com/ 

服務器應用程序在50毫秒(平均響應)

echo $_GET['Callback'].'('.json_encode(array('response' => 'http://www.google.com/')).')'; 

服務器響應頭

Access-Control-Allow-Origin: * 
Cache-Control: no-cache 
Connection: close 
Content-Length: 152 
Content-Type: application/json; charset=utf-8 
Date: Tue, 02 Dec 2014 09:52:46 GMT 
Pragma: no-cache 

服務器響應體

jQuery19109435868220625793_1417512417785({"response": "http://www.google.com/"}) 

服務器日誌有來自iPad的請求,但似乎所有從其他瀏覽器。

爲什麼會發生這種情況?

+1

看起來來自iPad的請求在服務器上超時。沒有看到服務器在這個請求中正在做什麼,它幾乎不可能回答這個問題。 – 2014-12-02 10:30:24

+0

簡單'echo $ _GET ['Callback']。'('。json_encode(array('response'=>'http://www.google.com/'))。')';' – ar099968 2014-12-02 10:38:00

+1

是您的服務器證書-protected? – faby 2014-12-02 10:44:03

回答

2

Safari會忽略同步AJAX調用中的超時設置。如果您的頁面在10秒內未收到來自服務器的響應,則會收到NETWORK_ERR錯誤。

嘗試在Ajax調用添加特定timeout財產

timeout: 240000 

更新

這似乎是不可能變化10秒鐘,他最大的超時,因爲Safari的考慮更長時間的等待爲「壞「的用戶。您可以使呼叫異步,並使用promise來模擬同步

+0

仍然不能在iPad上正常工作:( – ar099968 2014-12-02 11:11:24

+0

我已更新答案 – faby 2014-12-02 11:19:29

+0

問題不是服務器需要太長的時間來響應服務器提供的平均響應時間爲50ms在服務器日誌中是來自iPad的請求,但出現在其他瀏覽器中的所有請求 – ar099968 2014-12-02 11:26:33