【问题标题】:Escape characters in JSON string before ajax call在ajax调用之前转义JSON字符串中的字符
【发布时间】:2014-04-02 19:51:28
【问题描述】:

我有一个 JSON 字符串

var str = '{'+
            '"name": "John Doe",'+
            '"company": [{"name": "ABC Corp"}, {"name": "XYZ Corp"}],'+
            '"salary": "$200000"'+
           '}';

我将 ajax 调用设为

$.ajax({
     url: 'url',
     type: 'POST',
     context: document.body,
     dataType: 'json',
     data: str,
     success: function(data){},
     error: function(error){}
     });

如何在进行 ajax 调用之前转义 JSON 数组中的双引号。

【问题讨论】:

  • 你到底在哪里使用这个str变量?
  • escape(str); 肯定会逃脱一切
  • 为什么要转义这些引号,因为它们完全符合它们应该的样子?
  • 哦,现在问题很明显了,你正在对字符串进行字符串化,这会给你一个错误。停止对它进行字符串化,为什么要以字符串开头,$.ajax 接受对象。

标签: javascript jquery ajax json


【解决方案1】:

str 已经是有效的 JSON(根据 JSONLint),因此在通过 $.ajax 发送之前无需转义任何内容。

【讨论】:

  • 等等——所以对于数据选项——你可以传入一个像“test”这样的字符串吗?我认为它必须是键/值,例如 "key=test"(as string){key:test} <-- as object
  • @ᾠῗᵲᄐᶌ - 您可以将格式为 json 的字符串发送到 $.ajax。你可能不应该,但那是一个不同的讨论。
  • @Jamiec 嗯.. 从来不知道 - 将不得不检查代码
【解决方案2】:

看来你走错路了 - JSON.stringify 用于将 JSON 对象转换为字符串,你想要的方法是 JSON.parse

所以改成:

$.ajax({
     url: 'url',
     type: 'POST',
     context: document.body,
     dataType: 'json',
     data: JSON.parse(str),
     success: function(data){},
     error: function(error){}
     });

您还可以将格式为 JSON 的字符串传递给 $.ajax,由于您的字符串已经是有效的 JSON,您可以完全跳过该步骤:

$.ajax({
     url: 'url',
     type: 'POST',
     context: document.body,
     dataType: 'json',
     data: str,
     success: function(data){},
     error: function(error){}
     });

虽然你可以将它构建为一个对象,如果这更容易的话(通常比尝试格式化字符串!):

var postData = {
   name:'John Doe'
   ... etc
};

$.ajax({
     url: 'url',
     type: 'POST',
     context: document.body,
     dataType: 'json',
     data: postData,
     success: function(data){},
     error: function(error){}
     });

【讨论】:

  • 如果它是一个有效的字符串,你为什么要解析它,你不能发送一个对象,所以 jQuery 必须在内部再次将它字符串化?
  • @adeneo - 我只是按照所述回答问题。当你发表评论时,我正在更新一个更好的解决方案。
  • 您应该注意,传递 JSON 字符串将得到与传递 JavaScript 对象完全不同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
相关资源
最近更新 更多