在Ajax上成功我在count变量中获取以下数据。使用(ajax调用成功的片段):
success: function (count) {
console.log(count);
}
在console.log(count)下方保存此数据,如浏览器控制台中所示:
{
'07/12/2017': {
'day': {'failed': 0, 'success': 3},
'night': {'failed': 0, 'success': 0}
},
'06/12/2017': {
'day': {'failed': 2, 'success': 20},
'night': {'failed': 1, 'success': 291}
},
'05/12/2017': {
'day': {'failed': 6, 'success': 50},
'night': {'failed': 1, 'success': 51}
}
}
我尝试访问数据时的问题(所有这些都在ajax成功函数中),比如我有一个变量日期=' 07/12 / 2017'我确实计算[日期]我得到未定义,但如果我手动复制和硬编码数据计数如下,那么count [date]将返回相应日期内的对象:
count = {
'07/12/2017': {
'day': {'failed': 0, 'success': 3},
'night': {'failed': 0, 'success': 0}
},
'06/12/2017': {
'day': {'failed': 2, 'success': 20},
'night': {'failed': 1, 'success': 291}
},
'05/12/2017': {
'day': {'failed': 6, 'success': 50},
'night': {'failed': 1, 'success': 51}
}
}
可能是简单的事情,但它现在完全逃脱了我。
提前致谢
答案 0 :(得分:1)
根据问题和评论中的证据,我认为count
包含一个字符串。你所展示的是无效的JSON,也不是我见过的任何控制台在你console.log
时代表对象的方式,所以我怀疑它是一个字符串,它实际上是从服务器到你的浏览器的。
如果是,则服务器发送无效的JSON。属性名称(以及所有其他字符串)必须是双引号,而不是单引号。
所以解决方案是:
更正服务器的输出。输出JSON的最佳方法是不来手工制作它,而是构建一个对象图,然后使用服务器端环境相当于JSON.stringify
。
如果您此时仍在接收字符串,请更新服务器代码,以便通过发送此标头正确识别您作为JSON发回的内容:
Content-Type: application/json
jQuery会在响应中看到该内容类型,并自动为您解析字符串。
然后,count
会引用一个对象图,而使用count[date]
的代码,其中date
是字符串07/12/2017
将起作用。
这里正在使用jsFiddle使用jsFiddle方便的“回声”功能,它让我们告诉服务器回复一些东西给我们:https://jsfiddle.net/narxfmdm/以下是小提琴中的代码:
var json = '{' +
' "07/12/2017": {' +
' "day": {"failed": 0, "success": 3}, ' +
' "night": {"failed": 0, "success": 0}' +
' }, ' +
' "06/12/2017": {' +
' "day": {"failed": 2, "success": 20}, ' +
' "night": {"failed": 1, "success": 291}' +
' }, ' +
' "05/12/2017": {' +
' "day": {"failed": 6, "success": 50}, ' +
' "night": {"failed": 1, "success": 51}' +
' }' +
'}';
$.ajax({
type: "POST",
url: "/echo/json/",
data: {json: json, delay: 1},
success: function(count) {
var date = "07/12/2017";
$("<p>").text("Data for " + date + ": " + JSON.stringify(count[date])).appendTo(document.body);
}
});