【问题标题】:Invalid characters in JSON.parse(result.responseText);JSON.parse(result.responseText) 中的无效字符;
【发布时间】:2013-06-13 17:56:52
【问题描述】:

我正在返回一个如下所示的字符串:

[{"name":"John","age":"21","gender":"m"}]

然后做:

JSON.parse(result.responseText);

将数据放入网格控件中。它在 FF 中运行良好。在 IE 中,我的字符串如下所示:

[{\"name\":\"John\",\"age\":\"21\",\"gender\":\"m\"}]

并且斜线没有被处理,我的JSON.parse(result.responseText) 失败给我无效字符错误。为什么我在浏览器之间有不同的响应,我该如何解决这个问题?我正在发布完整的通话。

    Ext.Ajax.request({
        url : 'PersonServlet',
        method: 'POST',                   
        params :{'id': id},

        success: function ( result, request ) {
            resultData = JSON.parse(result.responseText);
            store.removeAll();
            store.add(resultData);

        },
        failure: function ( result, request ) {
            resultData = JSON.parse(result.responseText);
        }   
    });

【问题讨论】:

  • IE8 的 JSON.parse 不喜欢解析数组文字,只解析对象。你可能会做一些事情,比如将你的数组包装在一个单独的 prop 对象中:{data:[{"name":"John","age":"21","gender":"m"}]},然后说 resultData = JSON.parse(result.responseText).data;
  • 好吧,我尝试使用这样的返回数据 "{data:[{'name':'John','age':'21','gender':'m'}]}" 但是resultData = JSON.parse(result.responseText);呼叫不起作用,并给我一个错误 JSON 未确定。
  • 我可以清理 responseText 以将反斜杠替换为空白空间吗?这会起作用,但这是一个好的解决方案吗?
  • 也许,但我不确定为什么\那些反斜杠首先是如何存在的,如果您的响应看起来像第一个代码框...
  • 尝试在您的回复中将 symbol(") 替换为 symbol(')。首选,在发送到 extjs 之后。

标签: java javascript ajax servlets extjs


【解决方案1】:

尝试使用 http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.JSON 而不是原生的 JSON 解析器。希望你会得到更一致的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2012-03-30
    • 2014-09-08
    相关资源
    最近更新 更多