2012-03-01 49 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很樂意使用它太:)