Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用$.ajax发送JSON时,改为发送查询字符串_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 尝试使用$.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); } }); 但是我的服务器收

我使用以下脚本通过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);
   }
 });

但是我的服务器收到一个查询字符串,比如
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);
   }
 });