JSON / PrototypeJS - почему это работает ИНОГДА? - PullRequest
0 голосов
/ 11 июня 2010

Это сводит меня с ума!

Я получаю JSON с моего сервера:


{"id262":{"done":null,"status":null,"verfall":null,"id":262,"bid":20044,"art":"owner","uid":"demo02","aktion":null,"termin_datum":null,"docid":null,"gruppenid":null,"news":"newsstring","datum":"11.06.2010","header":"headerstring","for_uid":"demo01"},

"id263":{"done":null,"status":"pending","verfall":null,"bid":20044,"id":263,"uid":"demo02","art":"foo","aktion":"dosomething","termin_datum":"11.06.2010","docid":null,"gruppenid":null,"datum":"11.06.2010","news":"newsstring","for_uid":"demo01","header":"headerstring"},

"id261":{"done":null,"status":null,"verfall":null,"id":261,"bid":20044,"art":"termin","uid":"demo02","aktion":null,"termin_datum":"25.06.2010","docid":null,"gruppenid":null,"news":"newsstring","datum":"11.06.2010","header":"headerstring","for_uid":null}}

Вот так выглядит мой 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), но она не регистрирует JSON в консольном журнале().Я не получаю никаких ошибок, и javascript все еще работает.

В следующий раз после перезагрузки это может сработать, но это может не сработать.

Я не могу даже представить, почему это иногда происходит!1017 *

Ответы [ 2 ]

1 голос
/ 11 июня 2010

Вы вызываете evalJSON дважды, каждый раз с разными параметрами.
Обычно я не ожидал бы, что это будет иметь какие-либо побочные эффекты, и действительно, документация по прототипу для этого метода не упоминает ничего. Тем не менее, я помню, что более ранние версии firebug, как было известно, манипулировали XMLHttpRequest странными способами (для захвата входящих и исходящих данных), поэтому, возможно, это все еще актуально сегодня.

Попробуйте вместо этого изменить инструкцию журнала:

console.log(db_json);
0 голосов
/ 14 июня 2010

Я нашел ответ.Это заставляет меня хотеть хлопнуть головой.Мой $ ('someArray1target') div иногда еще не загружался.

Я был настолько сосредоточен на поиске чего-то странного в моем JSON вместо поиска более очевидных, "стандартных" ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...