错误的请求 – 节点js ajax后

我使用Express 3.0和节点v0.11.0。 我有一个提交表单的button,我正在使用Ajax将数据作为JSON对象发布到我的节点服务器。
客户端代码是:

$('#contact').submit(function(e) { console.log('submit called'); var formData = JSON.stringify($('form').serializeObject()); console.log(formData); $.ajax({ url: "http://localhost:3000/savedata/", type: "POST", dataType: 'json', data: {objectData: formData}, contentType: "application/json", complete: function() { console.log('process complete'); }, success: function(data) { console.log('process sucess'); }, error: function() { console.log('process error'); }, }); return false; }); 

然后在我的服务器上:

 var express = require('express'); var app = express(); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.static(__dirname + '/public', {maxAge: 86400000})); app.engine('.jade', require('jade').__express); app.post('/savedata', function(req, res) { console.log('savedata called'); console.log(req.body); //var resultObject = JSON.parse(req.body.objectData); //console.log(resultObject); res.end(); }); 

我面临的问题是,当我使用express.bodyParser()中间件时,我得到一个:

 Error: Bad Request at next (/home/captain/data/lemontreecakes/node_modules/express/node_modules/connect/lib/proto.js:125:13) at /home/captain/data/lemontreecakes/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:54:23 at IncomingMessage.<anonymous> (/home/captain/data/lemontreecakes/node_modules/express/node_modules/connect/lib/middleware/json.js:74:60) at IncomingMessage.EventEmitter.emit (events.js:92:17) at _stream_readable.js:883:14 at process._tickCallback (node.js:415:13) 

这是我的浏览器的控制台输出:

 submit called load.js:33 {"name":"tes","email":"tets@est.com"} load.js:36 POST http://localhost:3000/savedata/ 400 (Bad Request) jquery-1.9.1.min.js:5 process error load.js:54 process complete 

所以我知道我正在提交数据到我的服务器。 如果我从节点服务器中删除了body parser中间件,那么我就可以得到

 savedata called TypeError: Cannot read property 'objectData' of undefined 

我在想,我没有正确地发送JSON数据到服务器。 任何提示将不胜感激。

我不完全确定,如果这解决了这个问题,但试试这个:

 $.ajax({ ... data: JSON.stringify({ "objectData": formData}), ... 

试试这个代码:

 $.ajax({ url: "/savedata/", type: "POST", data: formData, contentType: "application/json", success: function(data) { alert('success'); }, error: function() { alert('error'); } } ); 
  • 首先,基于浏览器的AJAX可能不会执行跨域HTTP请求(例如,您的网站localhost:3000可能不会向google.com或除localhost:3000以外的任何网站发出AJAX请求)。 所以,如果你真的想这样做,让你的服务器处理它。

    否则,如99%的时间,只需使用相对URL( /savedata/ )。

  • 此外,请确保您只发送一个string化的JSON对象 ,而不是一个JSON对象。

    例如'{"test" : 1}'不是 {"test" : 1} 。 所以在你的情况下,string化的对象是formData。

我没有在节点服务器上用示例数据尝试这个代码,并且它工作正常。 如果你有任何额外的问题,随时问。

我也可以给你的代码,如果你想要它。