【问题标题】:JSON failing to parse when strings contain HTML markup当字符串包含 HTML 标记时 JSON 无法解析
【发布时间】:2012-08-09 00:53:40
【问题描述】:

当 html 标记添加到 json 时,为什么这个 ajax 会失败,如果 <br /> 不存在,那么它是有效的。我能想到的唯一解决方法是对文本进行编码。

你知道为什么或/还有其他建议吗。

谢谢

 $.ajax({
            type: "POST",
            url: "/url",
            //data: { "myText" : '[{ "a": "test1", "b": "test2"}]' },//works
            data: { "myText": '[{ "a": "<br />dfgdfgdfgdfgdgd", "b": "test2"}]' },//causes error
            dataType: 'json',
            success: function (data) {
                        alert("pass");
            },
            error: function () {
                        alert("error");

            }
        });

【问题讨论】:

  • 您发布到什么服务器端技术?大多数不允许您发布可能有害的字符,例如
  • 嗨,我正在使用 asp.net 作为服务器
  • 从技术上讲,
    是 HTML 标记,
    是 XHTML。可能您的解析器非常严格?
  • 在您的浏览器中,在发送 Ajax 请求时检查控制台网络/网络选项卡。您是否收到错误 500?
  • 如果您遇到错误,请查看此帖子以获取答案stackoverflow.com/questions/3621272/…

标签: javascript jquery


【解决方案1】:

尝试使用JSON.stringify 方法:

data: { "myText": JSON.stringify([{ "a": "<br />dfgdfgdfgdfgdgd", "b": "test2"}]) }

或者如果您不想将 myText 作为 JSON 字符串发送,请删除单引号:

data: { "myText": [{ "a": "<br />dfgdfgdfgdfgdgd", "b": "test2"}] }

当然,如果您在服务器端使用某些技术(例如 ASP.NET),在请求中禁止使用诸如 &lt; &gt; 之类的字符,则您必须修复服务器端脚本,以便它接受这些字符。

【讨论】:

  • 这是修复。大多数服务器不允许&lt;...&gt;进入,作为安全预防措施,它们必须被转义。
  • JSON.stringify 不起作用,但我尝试对其进行 html 编码并且有效 - 如果它有效,可以吗?
  • 当您说它不起作用时,您并不是很具体。如果问题来自您的服务器端脚本,最好解决它。
  • 当然它会命中服务器。返回此 500 错误的是服务器。因为您的脚本可能会拒绝这些字符。您使用的是什么服务器端技术?如果是 ASP.NET,您可以禁用验证。
猜你喜欢
  • 2012-04-07
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2020-12-17
  • 1970-01-01
相关资源
最近更新 更多