Javascript JSON.parse在代码中不工作,但在开发人员控制台中工作良好
我有一个$http post服务,它与WCF服务对话。http post有一个成功处理程序:Javascript JSON.parse在代码中不工作,但在开发人员控制台中工作良好,javascript,json,Javascript,Json,我有一个$http post服务,它与WCF服务对话。http post有一个成功处理程序: .success(function (data) { var response = JSON.parse(data); var tsValid = response.Outcome; deferred.resolve(tsValid); } 但是,tsValid始终为“未定义”。如果我添加一些控制台日志,我可以看到“数据”如下所示: "{\"Message\":\"Valid
.success(function (data) {
var response = JSON.parse(data);
var tsValid = response.Outcome;
deferred.resolve(tsValid);
}
但是,tsValid始终为“未定义”。如果我添加一些控制台日志,我可以看到“数据”如下所示:
"{\"Message\":\"Valid Timestamp\",\"Reference\":\"CheckTimestamp:Completed\",\"Outcome\":true,\"Data\":null,\"MessageCount\":0,\"MessageGUID\":null}"
{"Message":"Valid Timestamp","Reference":"CheckTimestamp:Completed","Outcome":true,"Data":null,"MessageCount":0,"MessageGUID":null}
然后“响应”如下所示:
"{\"Message\":\"Valid Timestamp\",\"Reference\":\"CheckTimestamp:Completed\",\"Outcome\":true,\"Data\":null,\"MessageCount\":0,\"MessageGUID\":null}"
{"Message":"Valid Timestamp","Reference":"CheckTimestamp:Completed","Outcome":true,"Data":null,"MessageCount":0,"MessageGUID":null}
因此,JSON.parse在成功处理程序中所做的一切就是去掉转义字符。当我尝试访问response.output时,它是未定义的
但是,如果我打开一个命令提示符并对“data”变量手动执行JSON.parse,它将正确解析JSON,我可以访问response.output
你知道为什么JSON.parse不能在成功处理程序中工作吗
编辑-我修改了控制台输出,删除了“数据:”和“响应:”标记。它们由我添加到控制台日志中,以便我可以识别哪个是哪个。在
响应下,您有密钥数据
,因此您应该调用:
var tsValid=response.data.output代码>
编辑
你能运行这个代码并粘贴日志吗
.success(function (data) {
console.log(data);
var response = JSON.parse(data);
console.log(response);
var tsValid = response.Outcome;
deferred.resolve(tsValid);
}
我编辑了这篇文章,因为可能会对JSONlog的数据有一些混淆:“{”消息\“:\”有效时间戳\“,\”引用\“:\”检查时间戳:完成\“,\”结果\“:true,\”数据\“:null,\”消息计数\“:0,\”消息GUID \“:null}”响应日志是:{”消息“:”有效时间戳“,”引用“:”检查时间戳:完成“,”结果“:true,“数据”:null,“MessageCount”:0,“MessageGUID”:null}JSON.parse for data返回错误:SyntaxError:Unexpected token
JSON.parse(“{”Message\“:\“Valid Timestamp\”,“Reference\”:\“CheckTimestamp:Completed\”,“output\”:true,\“data\”:null,\“MessageCount\”:0,\“MessageGUID\”:null})tsValid是success函数的本地值。var语句之后是否未定义?tsValid在“var tsValid=response.output”之后立即未定义;如果您记录typeof response
,该怎么办?响应类型是“string”。看起来服务器以某种方式进行了双重字符串化。您需要使用var response=JSON.parse(eval(data))
或var response=JSON.parse(JSON.parse(data))代码>