这是我的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字符串格式了,都是这种报错。 初学者,遇到的问题比较简单,解决的手法也比较粗糙,目前只会看看报错。但是确实用了很多时间来解决,希望各师傅们能指教,非常感谢。
@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 默认的contentType
是 application/x-www-form-urlencoded; charset=utf-8
, 所以不出错