Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON/PrototypeJS-为什么这只在某些时候起作用?_Javascript_Json_Prototypejs - Fatal编程技术网

Javascript JSON/PrototypeJS-为什么这只在某些时候起作用?

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

这简直快把我逼疯了

我正在从我的服务器获取一些JSON:



这就是我的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);