2012-03-01 46 views
3

我有一个正在开发的站点正在使用大量的AJAX调用。我使用快捷方式 - .get(),.post()和.load()使用OPTIONS而不是GET/POST的jquery ajax请求 - 仅在iPad上?

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

a)这只会发生在iPad Mobile Safari上,而不是在桌面上的Safari或任何桌面上的其他浏览器 b)我tripple-checked,我使用相同的域名,没有子域名,没有http/https等。

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

+0

这恐怕与这个问题有关:http://stackoverflow.com/questions/ 9210015/jquery-ajax-stopped-working-with-ios-5-0-1/10533966 – Evgenii 2012-05-10 12:27:39

+0

尝试在iPad上启用javascript控制台以查看是否有任何控制台错误。还请确保您始终使用最新版本 – 2012-06-07 04:21:35

+0

您是否尝试过使用jQuery移动? – 2012-06-24 14:12:22

回答

1

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

所以我把这个给我的global.asax.cs文件中的所有REST服务继承的方法“Application_BeginRequest”。所以,当一个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请求。

我想你必须这样做。你使用什么技术为您的网站?

顺便说一句,如果你有更好的方法,通过概率来获得,i'ld很乐意使用它太:)