jQuery .ajax POST请求在Node接收时具有空主体

时间:2014-11-12 03:54:06

标签: javascript jquery ajax node.js

出于某种原因,当我使用jQuery创建一个ajax帖子时,节点收到的正文是空的。这是我的ajax帖子:

的jQuery

var formData = {
    'order': order,
    'words': 'words'
};

$.ajax({

    type: 'post',

    url: 'https://example.com/charge',    
    processData: false,
    data: JSON.stringify(formData),

    contentType: 'json', 

    xhrFields: {
        withCredentials: false
    },  

    headers: {

    }, 

    success: function (data) {
        console.log('Success');
        console.log(data);

    },  

    error: function () {
        console.log('We are sorry but our servers are having an issue right now');
    }
})

这是我的节点代码:

节点

app.js

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use('/', routes);

routes/index.js

router.post('/charge', function(req, res) {
    console.log(req.body);
} //This always logs {}

我不知道我在这里做错了什么。我的浏览器甚至显示了有效负载和发布请求(formData对象),但节点没有记录任何内容。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

使用像这样的ajax请求:

$.ajax({
    type: 'post',
    url: 'https://example.com/charge',   
    data: formData,
    xhrFields: {
        withCredentials: false
    },  
    headers: {

    }, 
    success: function (data) {
        console.log('Success');
        console.log(data);
    },  
    error: function () {
        console.log('We are sorry but our servers are having an issue right now');
    }
})

答案 1 :(得分:1)

检查以下api

通过将processData选项设置为false,可以防止将数据自动转换为字符串。

如果要使用json类型,则必须将processData设置为true

Jquery processData

答案 2 :(得分:1)

我的也没有工作,但是通过使用来解决了

contentType: 'application/json',
data: JSON.stringify(formdata),

答案 3 :(得分:0)

这可能是一个较晚的答复,但也请注意JQuery ajax文档:

对象必须是键/值对。

这花了我2个小时(服务器收到空的正文),因为我试图发布一个更加“复杂”的对象。