【问题标题】:how to safely use JSON.stringify如何安全地使用 JSON.stringify
【发布时间】:2012-01-13 01:31:45
【问题描述】:

我得到一个 JSON 对象,然后我将其字符串化为 var embed。 console.log 看起来像:

console.log(send_me_along)

{"provider_url":"https://www.site.com/","description":"Stuff, you’ll need to blah blah","title":"Person detail view & engagement","url":"https://www.site.com/","version":"1.0","provider_name":"site","type":"link"}

然后在 ajax beforeSend 我尝试传递这个:

settings.data += '&embed_data=' + send_me_along;

这就是它崩溃的地方。我不知道为什么。你?某些东西 send_me_along 中断,JSON 对象永远不会进入轨道。

Started POST "/st" for 127.0.0.1 at 2012-01-12 17:20:25 -0800
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MzDImoksi56IZ1Fa4ldM8jaFyBy61xaWt4bf3z0/3UQ=", "comment"=>{"content"=>"https://www.site.com", "mentions"=>"https://www.site.com"}, "commit"=>"", "embed_data"=>"{\"provider_url\":\"https://www.site.com/\",\"description\":\"Stuff, you’ll need to blah blah.\",\"title\":\"Person detail view ", "engagement\",\"url\":\"https://www.site.com/\",\"version\":\"1.0\",\"provider_name\":\"site\",\"type\":\"link\"}"=>nil, "id"=>"ae86c5b7a6"}

标题中的 & 似乎在帖子中弄乱了。使用 settings.data 时是否需要使用 jQuery 做一些事情以防止字符串化数据破坏一切?

谢谢

【问题讨论】:

  • send_me_along 是一个对象,不确定要附加到 settings.data 的内容,是否需要查询字符串?

标签: javascript jquery ajax json


【解决方案1】:

如果您尝试将 JSON 字符串作为 url 参数传递,则需要对其进行编码,以便在 url 中有意义的特殊字符(如 & 符号)不会破坏内容。所以像:

settings.data += '&embed_data=' + encodeURIComponent(send_me_along)

更多关于encodeURIComponent()的信息MDN

【讨论】:

    【解决方案2】:

    使用encodeURIComponent 对数据进行编码。

    settings.data += '&embed_data=' + encodeURIComponent( send_me_along );
    

    【讨论】:

      【解决方案3】:

      调用ajax时为什么不直接将数据设置为对象?

      $.ajax(
        //...
        data: {
           stuff: "something"...
        }
      );
      

      让 jquery 处理 & 符号。

      【讨论】:

      • 好问题,我正在使用 Rails UJS,它为我做了所有这些。我能做的是修改 beforeSend 回调中的 data.settings ,这是我正在尝试做的......想法?
      • 应该可以调用escape并将字符串传递给它。
      猜你喜欢
      • 2011-06-29
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      相关资源
      最近更新 更多