【发布时间】:2012-06-27 02:11:55
【问题描述】:
我实际上已经尝试调试它一整天,这完全令人困惑。寻找一些提示。
我在 javascript 命名空间中有这些函数:
var ZZ = {
bar: function(data) {
console.log(data);
},
foo: function() {
$.ajax({
'url':'/test',
'type':'GET',
'dataType':'jsonp',
'success':function(ret_json, status) {
console.log(ret_json); // SUCCESS_1
console.log(ret_json[1].title); //SUCCESS_2
bar(ret_json);
}
});
},
...
}
所以我查看了开发人员工具的“网络”选项卡,返回的 json 是正确的......类似于:
[{'id':1, 'url':'http://a.com', 'title':'hi'}, {'id':2, 'url':'http://b.com', 'title':'hi2'}]
现在我查看控制台并看到在 SUCCESS_1 处,它打印出如下内容:
[{'id':1, 'url':'http://c.com', 'title':'hi3'}, {'id':2, 'url':'http://c.com', 'title':'hi3'}]
如您所见,id 是正确的,但 url 和 title 不正确。 (我也可以更改数据库中的id,它们将被正确执行)
然后在 SUCCESS_2 的下一行,它获取了正确的标题! 'hi2'
接下来我将调试器语句放入成功函数中: ret_json 看起来完全正确,但是当我进入 bar() 函数时.. 数据又看起来不对了。
接下来我补充:
var hi = {};
console.log(hi);
进入成功函数..它打印出来..(不是开玩笑)
{'url':'http://c.com', 'title':'hi3'}
所以基本上,这个“默认”会覆盖实际存在的内容。
我在 ajax 调用中添加了 cache:false,我尝试过 json 和 jsonp,我尝试过清除缓存,我尝试过使用 chrome/safari/firefox.. 但什么也没做,我怀疑这是什么东西太明显了……真的是真的被搞砸了。
我可以尝试什么其他想法?
UPDATE:将此命名空间添加到不同的 html 页面。 最令人震惊的例子
var hi = {}
console.log(hi)
打印的东西不见了 但是 ret_json 具有错误数据的原始问题仍然存在。 (我仍然无法访问上一个 html 页面的工作版本)
【问题讨论】:
-
console.log(hi) 的东西肯定很奇怪,不能马上说什么,但是您是否尝试过删除除 jquery 和示例脚本之外的所有外部脚本?另外,尝试在控制台中运行相同的短代码...
-
是的,如果我将它自己移动到一个页面,这个 ajax 调用就可以正常工作。在我当前的 javascript 环境中,这肯定是与其他东西的一些奇怪的交互......只是不确定我应该看哪里。
-
这是否与 JSON 中的单引号有关?
-
清除浏览器缓存,并确保 jQuery 也没有缓存服务器数据。
-
@veritasetratio 无法想象它与引号相关.. 不知道如何强制 json 对字符串使用双引号
标签: javascript jquery