【问题标题】:Building a JSON string using javascript/jQuery使用 javascript/jQuery 构建 JSON 字符串
【发布时间】:2012-06-28 20:39:48
【问题描述】:

我正在使用 jQuery 中的 $.post() 函数使用 JSON 字符串进行 Ajax 调用。调用如下所示:

$.post(
    urlVar,
    jsonVar,
    function(data){
        //do stuff
    },
    'json'
)
.complete(function(){
    //do other stuff
});

要创建 jsonVar 我正在使用此代码

var1 = {};
var1.id = fooId;
var1.amount = fooAmount;
var1.zoom = fooZoom;
jsonVar = JSON.stringify(var1);

为了使调用正常工作,jsonVar 应该如下所示

{id:fooId, amount:fooAmount, zoom:fooZoom}

但它看起来像这样

{"id":fooId, "amount":fooAmount, "zoom":fooZoom}

现在我的代码将无法工作,因为双引号。我不知道如何摆脱这些。谁能帮帮我?

重要提示:

如果我像这样放置$.post() 函数,代码确实可以工作:

$.post(
    urlVar,
    {id: fooId, amount: fooAmount, zoom: fooZoom},
    function(data){
        //do stuff
    },
    'json'
)
.complete(function(){
    //do other stuff
});

【问题讨论】:

  • 我会插话,AJAX 调用的接收端可能存在根本性错误,因为第二个 JSON 字符串是合法的 JSON 语法。事实上,我认为这实际上是标准的(超过无引号版本)。
  • 您的示例似乎存在缺陷,因为“缩放”从来都不是 var1 的一部分,而是实际上是 var2 的一部分。
  • 我在不同的浏览器中遇到了同样的问题。它在 qouting json-string 中的值之后起作用。比如:{"id":"fooId", "amount":"fooAmount", "zoom":"fooZoom"}
  • @MarkSchultheiss 我的错,这是一个错字。
  • @LuudJacobs ~ 如果可行,那么将var1 直接传递到AJAX 调用中也应该可以。你试过了吗?

标签: javascript jquery ajax json stringify


【解决方案1】:

JSON specification 声明键必须有双引号。

你的意思是你的代码因为双引号而不能工作?使用 JSON.parse 将 JSON 解析回对象;它内置于许多现代浏览器中,或者您可以使用 json2 库对其进行填充。

【讨论】:

    【解决方案2】:

    像这样更改post 调用

    $.post(
        urlVar,
        {var1:jsonVar},
        function(data){
          //do stuff
       },
       'json'
    )
    .complete(function(){
       //do other stuff
    });
    

    当然,你需要为你的接收应用做一个小周

    【讨论】:

      【解决方案3】:

      鉴于此代码:

      var fooId = 'foodyfood';
      var fooAmount = 10.20;
      var fooZoom = 'zoomer';
      var var2 = {};
      
      var var1 = {}; 
      var1.id = fooId; 
      var1.amount = fooAmount; 
      var2.zoom = fooZoom; 
      jsonVar = JSON.stringify(var1); 
      $('#showme').text(jsonVar);
      

      showme 中显示的值是:

      {"id":"foodyfood","amount":10.2}
      

      所以您的示例似乎有缺陷,实际上不是指定双引号的 JSON 标准。

      编辑:现在您对帖子的使用相当于:

      $.ajax({
        type: 'POST',
        url: url,
        data: data,
        success: success,
        dataType: dataType
      });
      

      除了它在您编辑后将对象作为第二个示例中的对象处理。

      在此处查看文档中的示例:http://api.jquery.com/jQuery.post/

      使用这种形式:

      $.post("test.php", { name: "John", time: "2pm" },   function(data) {
           alert("Data Loaded: " + data);   
      });
      

      如果你有:

      var mytest =  { name: "John", time: "2pm" };
      

      它变成:在stringify上

      {"name":"John","time":"2pm"}
      

      在此处查看工作示例:http://jsfiddle.net/v4NHv/

      【讨论】:

      • 请注意,如果您需要传递参数,您可以使用$.param(var1); 表单创建:id=foodyfood&amount=10.2
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多