【问题标题】:jquery ajax request using OPTIONS instead of GET/POST - only on iPad?使用 OPTIONS 而不是 GET/POST 的 jquery ajax 请求 - 仅在 iPad 上?
【发布时间】:2012-03-01 19:36:05
【问题描述】:

我正在开发一个使用大量 AJAX 调用的网站。我正在使用快捷方式 - .get()、.post() 和 .load()

在台式机上,使用我迄今为止测试过的任何浏览器都可以正常工作。但是当我使用 iPad 进行测试时,所有 AJAX 调用都失败了。检查服务器日志显示他们正在使用 OPTIONS 而不是 GET/POST - 到目前为止,这听起来像是之前回答过的问题,但是:

a) 这只发生在 iPad Mobile Safari 上,而不是桌面上的 Safari 或桌面上的任何其他浏览器 b) 我已经三重检查了我使用的是同一个域、没有子域、没有 http/https 等。

我不知道这里发生了什么,所以如果有人可以帮忙?

【问题讨论】:

  • 这可能与这个问题有关:stackoverflow.com/questions/9210015/…
  • 尝试在您的 iPad 上启用 javascript 控制台,看看是否有任何控制台错误浮出水面。还要确保您一如既往地使用最新版本
  • 你试过使用 jQuery mobile 吗?

标签: jquery ajax ipad


【解决方案1】:

我在 JQuery/.NET WCF 中的一个项目中遇到了同样的问题,其中 Firefox 使用 OPTIONS 动词来了解允许使用哪些动词(获取、发布、删除、放置)。

所以我在方法“Application_BeginRequest”中将它添加到我的 global.asax.cs 文件中,该方法由所有 REST 服务继承。因此,当调用 REST 服务时,它首先通过该方法:

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

if (HttpContext.Current.Request.HttpMethod == "OPTIONS") {
    HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, x-requested-with");
    HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
    HttpContext.Current.Response.End();
}

当使用动词“OPTIONS”时,全局页面返回允许的选项。然后浏览器发送 POST/DELETE/GET/PUT 请求。

我猜你必须做这样的事情。您的网站使用什么技术?

顺便说一句,如果你有更好的方法来解决这个问题,我也很乐意使用它:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多