Jquery Express bodyParser无法分析来自Internet Explorer的数据
我已经使用Node和Express 4创建了一个服务器应用程序,而前端是使用jQuery构建的。 我接到一个Ajax调用,使用POST将一些数据发送到服务器:Jquery Express bodyParser无法分析来自Internet Explorer的数据,jquery,ajax,internet-explorer,express,Jquery,Ajax,Internet Explorer,Express,我已经使用Node和Express 4创建了一个服务器应用程序,而前端是使用jQuery构建的。 我接到一个Ajax调用,使用POST将一些数据发送到服务器: $.ajax({ cache: false, type: 'POST', url: Config.API_ENDPOINT_REGISTRATION, dataType : 'json', data: info, success: this.successHandler.bind
$.ajax({
cache: false,
type: 'POST',
url: Config.API_ENDPOINT_REGISTRATION,
dataType : 'json',
data: info,
success: this.successHandler.bind(this)
});
除了IE8和IE9之外,在所有现代浏览器中,一切都按照预期运行
为了使jQuery中的Ajax调用成为可能,我必须使用这里提供的XDomainRequest脚本:
在添加此脚本之前,调用没有发生
现在的问题是,如果数据来自IE8/IE9,我在Express中得到的request.body总是空的
我想bodyParser无法解析从IE8/IE9接收到的数据时出了问题:request.body总是空的
我一整天都在试图解决这个问题,但没有成功
有什么想法或东西可以为我指明正确的方向吗?所以在深入研究这个问题之后(不久前),我注意到IE8和IE9上的
内容类型
标题都是空的
因为empty不是默认值,所以我检查了XDomainRequest设置是否受到干扰,发现正在将xdr.contentType设置为“”(empty)
我为这个问题创建的解决方案是一个Express.js中间件,用于为特定路由的请求设置/覆盖content-type头。下面是一个使用示例:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var registrationController = require('./controllers/registrationController');
server.use( '/registration', contentTypeOverride({
contentType: 'application/x-www-form-urlencoded'
}));
server.use( bodyParser.json() );
server.use( bodyParser.urlencoded({
extended: true
}));
app.post( '/registration', registrationController.index );
app.listen( 3000 );
您可以在这里找到中间件:在IE9中,bodyparser需要该中间件才能将请求主体读取为json
我通过在将请求传递给主体解析器之前显式设置内容类型来解决这个问题,如下所示:
app.use(function(req, res, next) {
// IE9 doesn't set headers for cross-domain ajax requests
if(typeof(req.headers['content-type']) === 'undefined'){
req.headers['content-type'] = "application/json; charset=UTF-8";
}
next();
})
.use(bodyParser.json());
正如我在前面的回答中所指定的,我已经为Express创建了一个中间件,它将内容类型设置为您想要的任何值: