Javascript jQuery未在AJAX POST请求上发送JSON

Javascript jQuery未在AJAX POST请求上发送JSON,javascript,jquery,ajax,json,mongodb,Javascript,Jquery,Ajax,Json,Mongodb,我在这里有点困惑,我试图使用以下代码将数据发布到我的node js服务器: $.ajax({type:'POST', url:'/map', data:'type=line&geometry='+str, success:function(msg) { console.log(msg); }, datatype:'json' }); 结果如下: { t

我在这里有点困惑,我试图使用以下代码将数据发布到我的node js服务器:

$.ajax({type:'POST',
        url:'/map',
        data:'type=line&geometry='+str,
        success:function(msg)
        {
          console.log(msg);
        },
        datatype:'json'     
    });
结果如下:

 { type: 'line', geometry: 'b~cqCge{b[mv|q@xnyC' }
这不是JSON。我以前尝试过使用
contentType
,并这样做:

$.ajax({type:'POST',
        url:'/map',
        data:{type:'line',geometry:str},
        success:function(msg)
        {
            console.log(msg);
        },
        datatype:'json',
        contentType:"application/json"  
    });
即使这样,发送的数据也没有任何变化。我还使用第一个数据字符串尝试了上述方法。我还尝试了将
processData
设置为
false
,以及代码块中的方法

对我来说,数据必须在
JSON
中,并使用
AJAX
,这一点很重要,因为我正在尝试使用它

$.ajax({ type: 'POST',
        url: '/map',
        data: {type:"line",geometry : str},
        success: function (msg) {
            console.log(msg);
        },
        dataType: 'json'
    });

与前面提到的@Rohan Kumar一样,将
datatype
替换为
datatype

使用
datatype
而不是
datatype
注意
T
Type
中的大写字母

dataType:'json',
试试这个

$.ajax({
    type:'POST',
    url:'/map',
    data:{type:'line',geometry:str},
    dataType:'json',// use dataType not datatype
    success:function(msg) {
        console.log(msg);
    }     
});

Read

实际上
数据类型
与输入无关,与输出无关

相反,您需要的是对输入的数据进行字符串化,然后将其作为单个变量发送到后端,后端可以对其进行解码:

$.ajax({type:'POST',
    url:'/map',
    data: {data: JSON.stringify({type: 'line', geometry: str})},
    success:function(msg)
    {
       console.log(msg);
    },
    dataType:'json'     
});
通过这种方式,您只需在后端解码
数据
,它现在应该是一个来自JSON的功能齐全的对象

注意:您需要JSON类来完成此操作,JQuery默认不包括此功能:

在php中发布所有值。
请试一试。

我遇到了同样的问题,NodeJS API后端接收到了
未定义的
request.body

我是如何通过调用AJAX解决问题的,如下所示:

$.ajax({
    url: serviceURL,
    data: JSON.stringify(jsonData),
    dataType: 'json',
    type: 'POST',
    contentType: 'application/json',
    success: response => console.log(response),
    error: e => console.log(e)
});

请注意,我必须同时提到
contentType:'application/json'
,以及
dataType:'json'
。另外,请注意,
JSON.stringify
-ing需要对有效负载JSON数据进行处理。

我也遇到了这个问题,但这段代码解决了我的问题:

$.ajax({
  method: 'POST',
  type: "POST",
  url: "/admin/get-message-details",
  data: {"messageId":messageId},
  success: function(){

  }
});

顺便说一句,数据从客户端到服务器以字符串的形式传输。因此,您可以准备并发送JSON结构中的数据。

您的代码有错误,在
数据:{…}
之后错过了一个
,我敢打赌
str
实际上是一个对象,因为这闻起来有发送GeoJSON类型数据的企图。这里有很多响应,但我会寻找从对象生成JSON字符串的东西。只是为了帮你挑对人。并将“contentType”保留在那里。你的服务器可能不在乎,但它应该在乎。@NeilLunn str是通过使用
google.maps.Geometry.encodePath
获取的字符串,它返回
字符串
正在添加
字符集:'utf-8
nessecary???@user2309862我从不这样做,除非真的需要它,否则我会说不。我一直在工作,直到昨晚10点才试图弄清楚这一点。我从后端的变量中得到了一个未定义的结果,实际上,在前端,我的请求发送了一个对象。我今天(星期六)要进去,我要试试这个解决方案,看看它是否有效!如果有,我会投赞成票的!:)这是一个解决了我的问题,所以我投了更高的票。我必须把它按这样的顺序排列,并包括内容类型,因为没有它是不行的。谢谢
$.ajax({
  method: 'POST',
  type: "POST",
  url: "/admin/get-message-details",
  data: {"messageId":messageId},
  success: function(){

  }
});