错误请求 - 节点js ajax发布

时间:2013-04-18 12:48:47

标签: node.js jquery express

我正在使用express 3.0和node v0.11.0。我有一个提交表单的按钮,我使用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解析器中间件,那么我得到

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

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

2 个答案:

答案 0 :(得分:3)

我不完全确定这是否能解决问题,但试试这个:

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

答案 1 :(得分:3)

请尝试使用此代码:

$.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或其他任何网站发送AJAX请求比localhost:3000)。因此,如果您真的想这样做,请让您的服务器处理它。

    否则,在99%的情况下,只需使用相对网址(/savedata/)。

  • 此外,请确保只发送字符串化的JSON对象发送JSON对象。

    例如'{"test" : 1}' {"test" : 1}。因此,在您的情况下,stringified对象是formData。

我在节点服务器上尝试使用示例数据的代码,并且运行正常。如果您有任何其他问题,请随时提出。

如果你需要,我也可以给你代码。