【发布时间】:2014-02-13 04:11:45
【问题描述】:
我使用的是带有 AS3 的上传 php 脚本,现在使用的是 JavaScript。如果没问题,有一个测试功能会返回这个:
{"erro":"OK","msg":"","descr":"op:ini,urlArq:\/Library\/WebServer\/Documents\/www\/sintran\/fotos\/teste.log"}
但 JavaScript 返回错误:JSON 解析错误:JSON 中不允许使用单引号 (')
如您所见,没有单引号。也许“descr”属性将解析引擎与 : 和 混淆了,但不希望更改它,因此 AS3 将不再读取此属性(是有用的数据)。
有什么想法吗?
编辑:斜杠用反斜杠转义,但上面没有显示。
编辑:代码:
formUpload.prototype.ini_test = function(evt){
console.log("ini_test - Retorno do servidor: "+evt.target.responseText);
var jsonRes = evt.target.responseText;
jsonRes = jsonRes.slice(jsonRes.indexOf("{"), jsonRes.lastIndexOf("}")+1);
try{
var Res = JSON.parse(jsonRes);
if(Res.erro!="OK"){
this.monitor_ini.innerHTML = "Erro: "+Res.msg;
} else {
this.monitor_ini.innerHTML = "";
var jExts = this.form.arquivo_tipos.value;
this.Exts = JSON.parse(jExts);
this.monitor_info.innerHTML = this.ajuda();
}
} catch(e){
this.monitor_ini.innerHTML = "Erro!";
console.log("formUpload ini_test Erro: "+e.message+" Resposta do servidor: "+jsonRes);
alert("Erro de teste de Upload. Resposta JavaScript: "+e.message);
}
}
编辑:全部由控制台日志显示 - 但这次我尝试不转义斜杠,因此最终字符串不同:
ini_test - Retorno do servidor: {"erro":"OK","msg":"","descr":"op:ini,urlArq:\/Library\/WebServer\/Documents\/www\/sintran\/fotos\/teste.log"}
formUpload ini_test Erro: JSON Parse error: Single quotes (') are not allowed in JSON Resposta do servidor: {"erro":"OK","msg":"","descr":"op:ini,urlArq:/Library/WebServer/Documents/www/sintran/fotos/teste.log"}
【问题讨论】:
-
JavaScript 代码是什么样的?你确定这个字符串是给
JSON.parse的吗,你记录了吗? -
已经是 JavaScript 对象了。你为什么要解析它?
-
@Givi:你为什么这么说?是什么让您认为 OP 正在尝试解析 JavaScript 对象。
-
@Givi:不,OP 提供的是一些文本。如何使用该文本的上下文决定了创建了哪种数据。可以是 JSON 数据(特定格式的 Unicode 数据)。它可以在 JavaScript 程序中,用于创建 JavaScript 对象。它可以在 Go 程序中,用于创建地图值。语法和数据不是一回事。不同的技术经常出于不同的目的使用相同的语法。
-
你确定它不是来自这里吗?
this.Exts = JSON.parse(jExts);
标签: javascript json