Javascript JSON.parse在代码中不工作,但在开发人员控制台中工作良好

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

我有一个$http post服务,它与WCF服务对话。http post有一个成功处理程序:

.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))