jquery - Express bodyParser 无法解析来自 Internet Explorer 的数据

标签 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(this)
 });

除了 IE8 和 IE9 之外,所有现代浏览器的一切都按预期运行。

为了使 Ajax 调用成为可能,我必须使用此处提供的 XDomainRequest 脚本:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest 在添加此脚本之前,调用没有发生。

现在的问题是,如果数据来自 IE8/IE9,我在 Express 中获取的 request.body 始终为空。

我认为 bodyParser 出了问题,无法解析从 IE8/IE9 收到的数据:request.body 始终为空。

我一整天都在尝试解决这个问题,但没有成功。

有什么想法或东西可以指引我正确的方向吗?

最佳答案

因此,在(不久前)深入研究这个问题后,我注意到 IE8 和 IE9 上的 content-type header 都是空的。

因为空不是默认值,所以我检查了是否有什么东西干扰了我的 XDomainRequest 设置,我发现 jQuery-ajaxTransport-XDomainRequest正在更改 xdr.contentType 将其设置为“”(空)。

我针对此问题创建的解决方案是一个 Express.js 中间件,用于设置/覆盖特定路由请求的内容类型 header 。这是一个使用示例:

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 );

您可以在这里找到中间件:express-content-type-override

关于jquery - Express bodyParser 无法解析来自 Internet Explorer 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24633940/

相关文章:

javascript - angularjs 的 Bootstrap datepicker 指令

javascript - 如何将 Twitter 的 Bootstrap Javascript 插件从版本 2.x 迁移到版本 3

javascript - 如果使用 KnockoutJS 绑定(bind),则执行嵌套 Viewmodel

javascript - Prototype Ajax Object 实际上没有在 IE 8 中发出请求

javascript - JQuery:如何在鼠标悬停事件上更改图形?

javascript - MySQL 和 AJAX,可以在其中之一中运行,但不能在另一个中运行

jquery - 多个ajax调用等待最后一个加载,然后执行

java - ie7图片上传问题

internet-explorer - HTA打开的对话框如何获得IE9标准支持?

jquery - jquery添加/删除类后返回正常状态