我有一个 Angular $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}
因此 JSON.parse 在成功处理程序中所做的所有操作都是删除转义字符。当我尝试访问 response.Outcome 时,它是未定义的。
但是,如果我打开命令提示符并对“data”变量手动执行 JSON.parse,它会正确解析 JSON,并且我可以访问 response.Outcome。
知道为什么 JSON.parse 在成功处理程序中不起作用吗?
编辑 - 我修改了控制台输出以删除“data:”和“response:”标签。它们被我添加到控制台日志中,这样我就可以识别哪个是哪个。
最佳答案
在响应
下,您有关键的数据
,因此您应该调用:
var tsValid = response.data.Outcome;
编辑
您可以运行此代码并粘贴日志吗?
.success(function (data) {
console.log(data);
var response = JSON.parse(data);
console.log(response);
var tsValid = response.Outcome;
deferred.resolve(tsValid);
}
关于javascript - JSON.parse 在代码中不起作用,但在开发人员控制台中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402866/