Javascript JSON/PrototypeJS-为什么这只在某些时候起作用?
这简直快把我逼疯了 我正在从我的服务器获取一些JSON:Javascript JSON/PrototypeJS-为什么这只在某些时候起作用?,javascript,json,prototypejs,Javascript,Json,Prototypejs,这简直快把我逼疯了 我正在从我的服务器获取一些JSON: 这就是我的JS的样子: var user = 'demo02'; new Ajax.Request('myscript.pl?someparameter=value', { method:'get', onSuccess: function(transport){ var db_json = transport.responseText.evalJSON(), propCount
这就是我的JS的样子:
var user = 'demo02';
new Ajax.Request('myscript.pl?someparameter=value', { method:'get',
onSuccess: function(transport){
var db_json = transport.responseText.evalJSON(),
propCount = 0,
someArray1 = [],
someArray2 = [],
otherArray = [];
//JSON DEBUG
console.log('validated string:');
console.log(transport.responseText.evalJSON(true));
for(var prop in db_json) {
propCount++;
if ( (db_json[prop].art == 'foo') && (db_json[prop].for_uid == user) ) {
someArray1.push(db_json[prop]);
} else if( (db_json[prop].art == 'foo') && (db_json[prop].uid == user) ) {
someArray2.push(db_json[prop]);
} else if( db_json[prop].art == 'log' ) {
otherArray.push(db_json[prop]);
}
}
if(someArray1.length>0) {
someArray1.map(function(el){
$('someArray1target').innerHTML += el.done;
//do more stuff
});
}
if(someArray2.length>0) {
someArray2.map(function(el){
$('someArray2target').innerHTML += el.done;
//do more stuff
});
}
});
有时,它工作得很好
有时,我会得到我的JSON字符串(它出现在Firebug的“应答”选项卡中),但它不会在console-log()中记录JSON。我没有收到任何错误,javascript仍在工作
下次重新加载后,它可能会工作,但可能不会
我无法想象为什么这只是偶尔发生 您两次调用evalJSON,实际上每次调用的参数都不同。
通常情况下,我不认为这会有任何副作用,事实上,这种方法的原型文档没有提到任何副作用。然而,我记得firebug的早期版本以奇怪的方式操纵XMLHttpRequest(为了捕获进出的数据),所以这可能在今天仍然是相关的 请尝试将log语句改为:
console.log(db_json);
我找到了答案。它让我想猛击我的头。我的$('someArray1target')div有时尚未加载
我专注于在JSON中发现一些奇怪的东西,而不是搜索更明显的“标准”错误。JSON调试是否总是返回true?你能给我们提供一个链接,让我们试着调试它吗?我的“JSON调试”失败时甚至没有登录到控制台。我在Firebug中看到的最后一件事是ajax请求得到了成功的回答。很抱歉,我无法提供链接,这在非公共服务器上运行。服务器端脚本是否总是返回相同的内容类型标头?这可能会影响evaljson的结果。另外,我会尝试在设置变量db_json之前放置log语句,并尝试直接记录字符串responseText,而不进行eval'ing。我的脚本始终返回相同的内容类型头。我还尝试删除所有console.log()的s.Nope:(有时仍然会卡住
console.log(db_json);