html5用ajax发送post请求到nodejs服务器 发生错误
发布于 9 年前 作者 guowenshuai 5811 次浏览 最后一次编辑是 8 年前 来自 问答

这是我的html调用提交请求的代码 function sendJson() { console.log(“send start”); $.ajax({ url: ‘/json’, type: ‘POST’, data: {"":""}, contentType: “application/json;charset=utf-8”, dataType: ‘json’, success: function(data){ console.log("success========== " + data.success); }, error: function(){ console.log(“error============”); } }); console.log(“send over”); } 这是nodejs服务器的处理请求代码 app.post(’/json’, function (req, res) { console.log(“req body:” + req.body); res.json({success: 1}); })

这是服务器的报错信息: Error: invalid json 这是客户端页面的报错信息: Failed to load resource: the server responded with a status of 400 (Bad Request) 也就是说我传递的json字符串格式有问题了。 如果提交的请求中Data字段为“”,也就是空字符串,那么就没有这些报错。 已经试过好多形式的json字符串格式了,都是这种报错。 初学者,遇到的问题比较简单,解决的手法也比较粗糙,目前只会看看报错。但是确实用了很多时间来解决,希望各师傅们能指教,非常感谢。

6 回复

猜测可能是json的key为空导致的,你试试给它设置key值

最终没能找到真正的原因,有师傅看到对这个问题感兴趣的可以交流一下 我把这句配置去掉了contentType: “application/json;charset=utf-8”, 可以post上传

要不抓包看看? 自豪地采用 CNodeJS ionic

@guowenshuai 对jQuery来说, 如果满足条件,它会把你的data转为query形式, 类似这样foo=1&bar=2

// Convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
    s.data = jQuery.param( s.data, s.traditional );
}

于是你的{"":""}被转成只有一等号=

这时候,如果你指定了contentType: "application/json;charset=utf-8",服务器就把以json的方式去对待=, 所以就出错

Error: invalid json

如果你去掉了contentType: "application/json;charset=utf-8", jQuery 默认的contentTypeapplication/x-www-form-urlencoded; charset=utf-8, 所以不出错

@William17 恩 谢谢 我想我还需要对jQuery和http再深入学习一下

@reverland 在chrome调试工具下看了下,还是挺有用处的 谢谢

回到顶部