Javascript 尝试使用$.ajax发送JSON时,改为发送查询字符串
我使用以下脚本通过ajax发送JSON:Javascript 尝试使用$.ajax发送JSON时,改为发送查询字符串,javascript,jquery,ajax,Javascript,Jquery,Ajax,我使用以下脚本通过ajax发送JSON: var dat = {"test":"opa"}; console.log(dat); $.ajax({ contentType: "application/json", method: "POST", url: "/test", dataType: "json", data: dat, success:function(res){ console.log(res); } }); 但是我的服务器收
var dat = {"test":"opa"};
console.log(dat);
$.ajax({
contentType: "application/json",
method: "POST",
url: "/test",
dataType: "json",
data: dat,
success:function(res){
console.log(res);
}
});
但是我的服务器收到一个查询字符串,比如
test=opa&foo=bar
。我做错了什么?这是因为您的数据类型。据
如果返回文本(“Hi”),则应指定
数据类型:“text”
。当您传递手动序列化的JSON字符串时,jquery将自动对数据进行URL编码
我建议你把它字符串化
$.ajax({
contentType: "application/json",
method: "POST",
url: "/test",
dataType: "json",
data: JSON.stringify(dat),
success:function(res){
console.log(res);
}
});
我觉得你的密码很好。改为设置
content=request.get_data()
,这样您就可以准确地看到服务器接收到的内容。您可以发布您收到的打印(响应)吗?另外,请尝试request.json,content=request.json时会出现相同的错误。当content=request.get_data()时,控制台上打印的内容如下:b'test=opa'。这似乎不对,事实上也不对。我刚刚在js中向json添加了另一个参数,服务器似乎收到了一个查询字符串:b'test=opa&foo=bar'
,这确实是我犯的一个错误,因为我放置响应只是为了得到一个,但它没有修复400错误。我的服务器无法处理JSON。奇怪的是,当我切换到request.get_data()时,我看到服务器接收到了一个查询字符串。很抱歉,正如摩西所指出的,我还忘了告诉您在使用数据类型“text”时使用JSON.stringify。是的,就是这样。必须把这个物体串起来。
$.ajax({
contentType: "application/json",
method: "POST",
url: "/test",
dataType: "json",
data: JSON.stringify(dat),
success:function(res){
console.log(res);
}
});