2014-09-30 45 views
0

我正在使用Jquery DataTable。並使用AJAX調用(跨域請求)這樣得到的數據:無法在POST請求期間將內容類型設置到IE 8中的ajax請求標頭上

ajax: { 
    url: url, 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8' 
    } 

這是如何查找在這個請求IE 8

Key Value 
Request POST /api/data HTTP/1.1 
Accept */* 
Origin http://localhost:5000 
Accept-Language en-US 
Accept-Encoding gzip, deflate 
User-Agent Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0) 
Host localhost:5555 
Content-Length 3647 
DNT 1 
Connection Keep-Alive 
Cache-Control no-cache 

的Jquery DataTable自動將內容發佈到服務器。但當請求通過IE 8發送時,服務器沒有收到任何數據中的HttpContext.Current.Request.Form對象。我使用下面的代碼來讀取服務器發佈的數據。

  var formData = HttpContext.Current.Request.Form; 
      var direction = formData["order[0][dir]"]; 
      var draw = Convert.ToInt32(formData["draw"]); 
      var length = Convert.ToInt32(formData["length"]); 
      var start = Convert.ToInt32(formData["start"]); 

如果我通過chrome或FireFox發佈請求,我會在服務器上獲取數據。 當請求正在通過IE 8內容類型頭未設置時。我認爲這是數據在服務器端不可用的原因。請幫忙!!

回答

0

您正在設置dataType而不是contentType。根據jQuery docs,在設置瀏覽器正在發送的內容時需要使用contentType,而在指定瀏覽器期望接收的內容時需要使用dataType

的contentType(缺省: '應用/ X WWW的窗體-urlencoded; 字符集= UTF-8')

類型:String

當發送數據到服務器時,使用該內容類型。默認爲 「application/x-www-form-urlencoded; charset = UTF-8」,這對於大多數情況是適用的 。如果明確地將內容類型傳遞給$ .ajax(),那麼它總是被髮送到服務器(即使沒有數據被髮送)。 W3C XMLHttpRequest規範規定字符集始終爲 UTF-8;指定另一個字符集不會強制瀏覽器更改 的編碼。注意:對於跨域請求,將內容 類型設置爲除application/x-www-form-urlencoded, multipart/form-data或text/plain之外的任何其他內容將觸發瀏覽器向OPTIONS請求發送一個 服務器。

+0

感謝您的回覆。我已經嘗試設置contentType,但看起來像IE 8不會發送此信息。檢查這個鏈接點沒有4. http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx – SharpCoder 2014-09-30 10:16:34

+0

它是跨域嗎? – RichieAHB 2014-09-30 10:21:12

+0

是的這是跨域請求 – SharpCoder 2014-09-30 10:24:45

0

要回答我的問題,在服務器端,我現在讀這樣的表單數據:

var formData = HttpUtility.ParseQueryString(await Request.Content.ReadAsStringAsync()); 

前,我試圖讀取這樣的數據:var formData = HttpContext.Current.Request.Form;

由於在點4的this link中提到,IE 8不會在請求頭中發送contentType。鏈接還談到了手動閱讀請求主體,這正是我現在正在做的事情。