$ .ajax(jQuery v1.9.1)无法在iPad上运行

时间:2014-12-02 10:28:38

标签: javascript jquery ajax ipad

Ajax不仅适用于iPad

$.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); }
});

iPad上的提醒

Sended!
Completed with status: timeout;
Error: timeout

IE(7,8,9,10,11),Firefox,Chrome,Opera,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 个答案:

答案 0 :(得分:2)

Safari会忽略同步AJAX调用中的超时设置。如果您的页面在10秒内未收到服务器的响应,则会收到NETWORK_ERR错误。

尝试在ajax调用中添加特定的timeout属性

timeout: 240000

<强>更新

似乎无法在最大超时时间内更改10秒,因为Safari认为较长时间等待用户“不好”。您可以对呼叫进行异步操作,并使用promise来模拟同步