jquery ajax请求使用OPTIONS而不是GET / POST - 只在iPad上?

时间:2012-03-01 19:36:05

标签: jquery ajax ipad

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

在桌面计算机上,到目前为止我使用的任何浏览器都能正常运行。但是当我使用iPad进行测试时,所有AJAX调用都会失败。检查服务器日志显示他们正在使用OPTIONS而不是GET / POST - 到目前为止听起来像之前回答的问题,但是:

a)这仅适用于iPad Mobile Safari,而不是桌面上的Safari或桌面上的任何其他浏览器 b)我已经检查过我正在使用相同的域,没有子域,没有http / https等。

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

1 个答案:

答案 0 :(得分:1)

我在JQuery / .NET WCF中的项目遇到了同样的问题,其中Firefox使用OPTIONS动词来了解允许的动词(get,post,delete,put)。

所以我将这个文件放在方法“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请求。

我想你必须做那样的事情。你用什么技术为你的网站?

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