如何将变量转换为json?

问题描述:

我想发送json数据到ajax,但你如何将变量转换为json或将数组转换为json?如何将变量转换为json?

$(".confirm_order").click(function(event) { 
    event.preventDefault(); 

    var street = $("#street").val(); 
    var location = $("#location").val(); 
    var number = $("#number").val(); 

    var f = ??? 

      $.ajax({ 
      type: 'post', 
      url: "/orders", 
      dataType: "json", 
      data: f, 
      success: function (l) { 
       alert("Done"); 
      } 
      }); 
}); 

如果你真的想将数据转换成JSON转换,你必须创建一个对象或数组,并使用JSON.stringify(可在较新的浏览器,可装载形式here):

var f = JSON.stringify({street: street, location: location, number: number}); 

,但你不能只是data属性设置为f即可。你必须把它分配给另一个变量:

data: {data: f} 

这将产生POST参数,像这样:

data={"number":"value of number","location:...} 

但是,没有理由在这里创建JSON。我会将这些值作为普通发布参数发送。对于刚创建一个对象像上面并指定为data

data: {street: street, location: location, number: number} 

这将创建POST参数:

street=valueofstreet&location=valueoflocation&... 

,你不必解析JSON这会更容易在服务器端。

+0

非常感谢你,你救了我的一天:* – 2017-03-09 02:38:53

var f = {} 
    f['street'] = $("#street").val(); 
    f['location'] = $("#location").val(); 
    f['number'] = $("#number").val(); 
+0

谢谢,地址块怎么样?这怎么可能...像地址块和命令块变成f varible? – user622378 2011-04-26 16:46:47

+0

默认情况下,jQuery将把它编码为application/x-www-form-urlencoded而不是application/json数据。 – Quentin 2011-04-26 16:47:14

+0

@ user622378:您可以在f变量中添加另一个键来存储可以是对象的值,如f 'var add = {}; add ['street'] ='streat'; f ['address'] = add;' – 2011-04-26 16:59:34

var f = { 
     "street": street, 
     "location": location, 
     "number": number 
     }; 
+0

默认情况下,jQuery会将其编码为application/x-www-form-urlencoded而不是application/json数据。 – Quentin 2011-04-26 16:48:39

如果你想发送JSON格式的请求到服务器,你可以指定该请求的适当的内容类型,然后使用JSON.stringify方法:

var street = $('#street').val(); 
var location = $('#location').val(); 
var number = $('#number').val(); 

$.ajax({ 
    type: 'post', 
    url: '/orders', 
    dataType: 'json', 
    data: JSON.stringify({ street: street, location: location, number: number }), 
    contentType: 'application/json; charset=utf-8', 
    success: function (l) { 
     alert("Done"); 
    } 
}); 

这将在POST正文中发送以下内容:

{ street: 'foo', location: 'bar', number: 'baz' } 

显然,您发送此AJAX的服务器端脚本需要能够处理和解析JSON字符串。

+0

只有最近的浏览器才提供JSON对象。如果你这样做的话,你真的应该包括一个库,它提供了一个稍微老一点的浏览器。 – Quentin 2011-04-26 16:51:20

+0

@David Dorward,这是正确的,也是一个重要的事情要指出。 – 2011-04-26 16:54:43

使用JSON.stringifyjson2.js

不要忘了在你的配置对象指定contentType: 'application/json'

试试这个。值将分别取代

{street : street,location : location, number : number}

+0

默认情况下,jQuery会将其编码为application/x-www-form-urlencoded而不是application/json数据。 – Quentin 2011-04-26 16:48:34