我有以下代码,它在其他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 \”, < / p>
我尝试将“\”替换为null字符串,但它不起作用
这个AJAX成功调用loadAsociatedTable函数时这样做:
for (var i = 0; i < $.parseJSON(data).length;i++){
并且$ .parseJSON(data).length中有错误,因为请勿将此字符串转换为对象。
我在Chrome中检查过并且JSON没问题,没有这个栏“\”,并且认识到它像对象一样,问题仅在IE v.11中。
答案 0 :(得分:0)
服务器的JSON响应无效。一些服务器程序员误解了JSON双引号转义并尝试在任何地方应用它。让服务器返回有效的JSON。大多数服务器环境都有标准的JSON库,它们将构造无效的JSON。正确的JSON当然只是
[{"Nombre del Documento":"Indemnizacion/Factura. 22076 - Proveedor - Sin: 38653 Global: No","Estado":"Pago finalizado", ...
您可以尝试自行修复JSON,将\"
替换为"
,这只是
replace(/\\"/g, '"')
但问题是你还会销毁代表字符串值中双引号的\"
个序列。这是一个非常棘手的问题需要解决。因此,最好的解决方案是让服务器向下发送正确的JSON。
答案 1 :(得分:0)
你能发布完整的JSON,这将有助于我分析 同时试试这个
在data.d上使用Eval,如eval(“{”+ data.d +“}”);
或JSON.Parse(data.d)
尝试在这里验证json http://jsonlint.com/
答案 2 :(得分:0)
最后我可以解决问题,我使用JSON.parse()代替$ .parseJSON(),也许是JQuery版本。 AJAX响应包含这个附加组件“\”但是当我解析这个对象时,JS会毫无问题地转换它。 谢谢你的帮助!