如何在查询字符串中保留类型

时间:2012-05-28 16:01:49

标签: node.js get query-string http-post

我试图整理一个会消耗json数据的API,而且我在保留变量类型方面遇到了问题。

警告:我正在使用Node.js

鉴于数据:

{
  id: "string",
  data: [
    {input: [0,1,0], output: [1,1]},
    {input: [1,0,0], output: [1,0]}
  ]
}

当我使用该数据发出jquery ajax post请求时,它被转换为:

data[0][input][]    0
data[0][input][]    1
data[0][input][]    0
data[0][output][]   1
data[0][output][]   1
data[1][input][]    1
data[1][input][]    0
data[1][input][]    0
data[1][output][]   1
data[1][output][]   0
id                  string

或:id=string&data%5B0%5D%5Binput%5D%5B%5D=0&data%5B0%5D%5Binput%5D%5B%5D=1&data%5B0%5D%5Binput%5D%5B%5D=0&data%5B0%5D%5Boutput%5D%5B%5D=1&data%5B0%5D%5Boutput%5D%5B%5D=1&data%5B1%5D%5Binput%5D%5B%5D=1&data%5B1%5D%5Binput%5D%5B%5D=0&data%5B1%5D%5Binput%5D%5B%5D=0&data%5B1%5D%5Boutput%5D%5B%5D=1&data%5B1%5D%5Boutput%5D%5B%5D=0

我需要做的是解码服务器端的数据,但 数据中所有数组的值都转换为字符串

是否有保留值类型的技术,即:“string”或“int”等?

我目前正在使用npm上的qs模块来解析我的POST请求正文。

3 个答案:

答案 0 :(得分:3)

JQuery将在AJAX请求的data选项中传递的任何对象序列化为application/x-www-form-urlencoded格式(就像查询字符串一样)。您想要的是JSON.stringify()您的对象,并将结果字符串作为data传递,并将Content-Type设置为上一个答案提及。

请记住,dataType选项指定jQuery应如何处理请求的响应,而不是如何对请求的主体进行编码(我已经被这个烧毁了)

答案 1 :(得分:1)

由于它是JSON服务器,因此在POST请求中设置Content-Type:application / json,因此您将解析对象而不是字符串。该对象将保留数据类型。在服务器上使用req.is('application / json')以确保请求的类型为'application / json'。

答案 2 :(得分:0)

这是一个有效的解决方案,希望它有所帮助。

$.ajax({
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json',
    url: 'http://localhost:3000/endpoint',                      
    success: function(data) {
        //TODO: do something with data   
    }
});