【问题标题】:Bad format in JSON response AJAXJSON 响应 AJAX 中的错误格式
【发布时间】:2015-12-02 02:25:00
【问题描述】:

我有以下代码,它在其他 PC 服务器中调用 Web 服务。 数据参数还可以。

"{ ControlId: 'ZAsociated_26037', TaskId: 1495613, UserId: 166396,  TBodyId: ''}"
 $.ajax({
        type: "POST",
        cache: false,
        dataType: "json",        
        contentType: "application/json; charset=utf-8",
        data: "{ ControlId: '" + controlId + "', TaskId: " + taskid + ", UserId: " +
              userId + ",  TBodyId: '" + $(tbody).attr("id") + "'}",
        url: getWSPath() + "/GetZAsociatedResults", // CARGAR AQUI LA DIRECCION DEL WEBSERIVCE
        success: function (data) {         

            if (data != null && data.d != "[]") loadAsociatedTable(controlId, data.d);
           $("#loadingImg" + controlId).remove();
        },
        error: function (xhr, ajaxOptions, thrownError) {
           $("#loadingImg" + controlId).remove();
           alert("Error al obtener los datos: " +thrownError + "\nCodigo de error: " +xhr.status);          
        }
    });

错误是,当我有 WS 的 data.d 结果时,JSON 在字符串中添加 adicionals "\" 字符:

响应的开始: [{\"Nombre del Documento\":\"Indemnizacion/Factura.22076 - Proveedor - Sin: 38653 Global: No\",\"Estado\":\"Pago finalizado\",

我尝试将“\”替换为空字符串,但它不起作用

成功调用 loadAsociatedTable 函数时的这个 AJAX 并且这样做:

 for (var i = 0; i < $.parseJSON(data).length;i++){

并且在 $.parseJSON(data).length 中有错误,因为不要将此字符串转换为对象。

我在 Chrome 中检查,JSON 没问题,没有这个栏“\”,并认识到像一个对象,问题仅在 IE v.11 中。

【问题讨论】:

  • 您从$.parseJSON(data) 收到的错误消息是什么?而且,dataloadAsociatedTable() 的第二个参数吗?您是否同时尝试.replace()$.parseJSON()?您是否尝试过在success 中只使用$.parseJSON(data.d)
  • $.parseJSON(data).lenght 的错误是“对象不支持属性或方法'parseJSON'”,JSON 错误包含附加“\”,当我尝试拥有我有这个错误的对象的长度。没错,loadAsociatedTable 的第二个参数就是这个 AJAX 的响应
  • 该错误与$ 对象本身没有parseJSON() 方法有关。你在为$ 使用jQuery 或类似的库吗?你用的是什么版本?在 jQuery 中,jQuery.parseJSON() 是在 1.4.1 中添加的,并且在较低版本中不可用。
  • 你最后一个问题的回答是:是的,但是我在JSON的某些参数中有很多“\”,最新的几行是:\“Estado solicitud x Liquidador\”:null,\ "Honorarios por tabla\":null,\"Gastos por tabla\":null,\"Ruta Documento\":\"\\\\\\\\172.18.33.3\\\\Stardoc\\\\ZambaVolumenes\ \\\Desarrollo\\\\VolSiniestros\\\\VOLSIN011\\\\26037\\\\13\\\\4859528.pdf\",\"DoctypeId\":\"26037\",\"IdDoc\ ":4859528}]"
  • 我正在使用 jquery-1.4.2.min.js

标签: javascript json ajax


【解决方案1】:

你能发布完整的 JSON 来帮助我分析吗 同时试试这个

在 data.d 上使用 Eval,例如 eval("{"+data.d+"}");

或 JSON.Parse(data.d)

尝试在此处验证您的 json http://jsonlint.com/

【讨论】:

  • data.d 是 "[{\"Nombre del Documento\":\"Indemnizacion/Factura. 22034576 - Proveedor - Sin: 3865233 全局:No\",\"Estado\":\"Pago finalizado\",\"ID Comprobante\":22540476,\"Nro de Siniestro\":38653,\"Sector\" :\"Siniestros Ramas Varias\",\"Rama\":\"INTEGRAL COMERCIO\",\"Administración\":null,\"Ingresado por\":\"prettimaur\",\"Tipo Beneficiario\": \"Proveedor\",\"Beneficiario\":\"ESTUDIO SANTAMARINA SA\",\"Proveedor\":null,\"Nro Orden de Pago\":230934562,\"Fecha propuesta por Siniestros\":null, \"Fecha Comprobante\":\"\\/Date(1378782000000)\\/\"}]"
  • 我在 Chrome 中检查,JSON 没问题,没有这个栏“\”,并认识到像对象一样,问题仅在 IE v.11 中。
【解决方案2】:

服务器的 JSON 响应无效。一些服务器程序员误解了 JSON 双引号转义并试图在任何地方应用它。让服务器返回有效的 JSON。大多数服务器环境都有标准的 JSON 库,这些库将构造无效的 JSON。正确的 JSON 当然只是

[{"Nombre del Documento":"Indemnizacion/Factura. 22076 - Proveedor - Sin: 38653 Global: No","Estado":"Pago finalizado", ...

您可以尝试自己修复 JSON,将 \" 替换为 ",这将是

replace(/\\"/g, '"')

但问题是您还将破坏表示字符串值内的双引号的\" 序列。这是一个很难解决的问题。所以最好的解决方案是让服务器首先发送正确的 JSON。

【讨论】:

    【解决方案3】:

    我终于可以解决问题了,我用 JSON.parse() 代替 $.parseJSON(),可能是 JQuery 版本。 AJAX 响应包含这个附加的“\”但是当我解析这个对象时,JS 转换它没有问题。 感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多