2012-09-03 64 views
1

我正在使用HttpContext.Request.IsAjaxRequest()來檢查傳入的請求是否來自ajax調用。IsAjaxRequest似乎無法與Internet Explorer

(實際上是從Valums FileUploader腳本)

這可以正確處理Chrome,但不是在IE瀏覽器?

什麼給?是否有另一種方法可以在所有瀏覽器中準確檢查?

謝謝。

回答

1

IsAjaxRequest()只是檢查HTTP請求中是否存在"X-Requested-With"標頭。如果它不存在或者有錯誤的值,那麼檢查將返回錯誤。

我的猜測是Chrome和FF可能會在您添加AJAX請求時添加它,如果它尚不存在,但IE不是。

這意味着腳本中可能存在更多的錯誤,並且不會添加標頭。應該很容易使用Fiddler或IE開發人員工具進行檢查。

要解決此問題,您有兩個選項之一。

  1. 修復腳本,使其將標題添加到XHR請求中。
  2. 使用不具有該錯誤的其他腳本。
+0

我正在使用jquery post方法我會認爲它會自動執行此操作? – shenku

+0

取決於您使用的是哪個版本的jQuery? – Josh

+0

@Josh:jQuery已經將該標題設置爲早於v1.0。這不是問題。 –

0

IsAjaxRequest測試某個HTTP標頭是否存在,當您使用它們的AJAX幫助程序時,類似jQuery的庫會設置此標頭。您正在使用的上傳者腳本falls back to a hidden iframe in IE。由於jQuery的AJAX幫助程序未在iframe後備使用中使用,因此請求中未設置標題MVC。

我對那個上傳器庫不太熟悉,知道它是否在其action中傳遞查詢字符串參數,但我建議嘗試一個像/controller/upload/?IsAjaxRequest=true這樣的操作。然後,你可以檢查Request.QueryString["IsAjaxRequest"] == "true",它應該工作,不管客戶端實現(假設上傳器確實傳遞了查詢字符串)。

0

它實際上是一個Jquery 1.7.2錯誤,因爲它沒有添加「X-Requested-With」頭文件。他們在1.8.2版中修復了它。 PS:我自己測試了這個

+1

您可以發佈到發行說明或錯誤跟蹤器嗎? – gdoron

0

如果像我一樣,你使用了相同的URL作爲ajax和'普通'頁面。那麼IE可以使用緩存版本。如果是這樣的話,它會迴應一個302迴應(我認爲)。

的修復

$.ajax({ 
        method: "GET", 
        cache:false, 

添加緩存標誌到你的Ajax。