当设置contentType时,jquery ajax不工作

我在localhost:3000和localhost:3001上运行了两个节点js服务器。 当我从localhost:3001到localhost:3000发出ajax POST请求时,没有任何反应。 我已经检查了localhost:3000上的日志,它甚至没有收到POST请求。

这是我正在做ajax调用的代码:

$.ajax({ type:"POST", url:"http://localhost:3000/post/", contentType:"application/json", dataType:'json', data: JSON.stringify({name:'Bruce Wayne'}), success:function(response) { console.log(response); } }); 

但是,当我删除contentType字段或将其更改为“文本/纯文本”,而不是“应用程序/ JSON”,它的工作原理。 在本地主机:3000我也发送这些头在响应。

 res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS"); 

我已经经历了很多问题,并尝试了一切。 有人能帮我弄清楚问题在这里吗? 谢谢。

这是jQuery的一个长期运行的问题,个人,不要问我为什么,但工作的解决scheme是:

 $.ajax({ type: "POST", url: "http://localhost:3000/post/", // contentType: "application/json", // Remove this bit. // dataType: 'json', // Remove this bit. data: JSON.stringify({name:'Bruce Wayne'}), success:function(response) { console.log(response); } }); 

在发送响应头文件时不要给application/json或者javascript/json或者text/json 。 让它成为: text/htmltext/plain 。 让我知道如果它的作品。

我能够自己解决这个问题,只是要发布这个答案,以防万一使用快递和节点在将来遇到类似的问题。

而不是将这三个头添加到我的控制器函数中的响应

 router.get('/post', function(req, res){ res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS"); ... //rest of the code }) 

我创build了一个中间件,并在主要的app.js文件中使用它,这是神奇的工作。 我完全不知道为什么,但它的工作原理。

 var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', "*"); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }; app.use(allowCrossDomain);