【问题标题】:$.ajax (jQuery v1.9.1) not work on iPad$.ajax (jQuery v1.9.1) 在 iPad 上不起作用
【发布时间】:2014-12-02 10:28:38
【问题描述】:

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 Desktop 中的警报

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 的请求,但显示来自其他浏览器的所有请求。

为什么会这样?

【问题讨论】:

  • 来自 iPad 的请求似乎在服务器上超时。如果没有看到服务器在这个请求上做了什么,几乎不可能回答这个问题。
  • 简单echo $_GET['Callback'].'('.json_encode(array('response' => 'http://www.google.com/')).')';
  • 您的服务器证书是否受保护?
  • @faby 没有证书

标签: javascript jquery ajax ipad


【解决方案1】:

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

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

timeout: 240000

更新

似乎不可能将 10 秒更改为最大超时,因为 Safari 认为更长的等待对用户来说是“坏事”。您可以进行异步调用并使用promise 模拟同步

【讨论】:

  • 问题不在于服务器响应时间过长。服务器在 50 毫秒内提供平均响应。在服务器日志中,有来自 iPad 的请求,但会出现来自其他浏览器的所有请求。
  • 您能否检查呼叫是否到达您的服务器?
  • 尝试仅在 Ipad 上传递 async:true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多