我正在使用Jquery DataTable。并使用这样的ajax调用( CROSS DOMAIN Request )来获取数据:
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 :(得分:0)
您正在设置dataType
而不是contentType
。根据{{3}},您需要在设置浏览器发送内容时使用contentType
,并在指定浏览器期望接收内容时使用dataType
。
contentType(默认值:' application / x-www-form-urlencoded; 字符集= UTF-8&#39)
类型:字符串
将数据发送到服务器时,请使用此内容类型。默认是 "应用程序/ X WWW的窗体-urlencoded; charset = UTF-8",这很好 大多数情况下。如果您明确地将内容类型传递给$ .ajax(),那么 它总是被发送到服务器(即使没有数据发送)。 W3C XMLHttpRequest规范规定charset始终是 UTF-8;指定另一个charset不会强制浏览器更改 编码。注意:对于跨域请求,请设置内容 键入application / x-www-form-urlencoded以外的任何内容, multipart / form-data或text / plain将触发浏览器发送 预检OPTIONS请求到服务器。
答案 1 :(得分:0)
要回答我自己的问题,在服务器端,我现在正在阅读这样的表单数据:
var formData = HttpUtility.ParseQueryString(await Request.Content.ReadAsStringAsync());
之前我试图读取这样的数据:var formData = HttpContext.Current.Request.Form;
如this link第4点所述,IE 8不会在请求标头中发送contentType
。该链接还讨论了手动读取请求正文,这就是我现在正在做的事情。