почему мой eval не превращает строку json в объект - PullRequest
0 голосов
/ 22 января 2010

Когда я выполняю функцию eval, она не превращает мой ответ json в объект, а просто нарушает мой код. Я попытался выполнить синтаксический анализ с prototype.js и JSON2.js, но безрезультатно. Пожалуйста, объясните, что я здесь делаю не так?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>Inventory Management</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Untitled Document</title>
        <script src="call.js" type="text/javascript"></script>
        <script src="prototype.js" type="text/javascript"></script>
    </head>
    <body>
    <div>
            <p id="resp" >new</p>
        <script type="text/javascript">



    var xhr;
    var results=getPlants(xhr,results);
    var plants;


    function getPlants(xhr,results){
        try {
            xhr=new XMLHttpRequest();   
            }catch(microsoft){
            try{
                xhr=new ActiveXObject("Msxml2.XMLHTTP");                
                }catch(othermicrosoft){
                    try{
                xhr = new ActiveXObject("Microsoft.XMLHTTP");               
                    }catch(failed){
                        xhr=false;
                        alert("ajax not supported");
                    }
                }               
        }   
        xhr.onreadystatechange= function () {
        if(xhr.readyState==4 && xhr.status==200) {
        results = xhr.responseText;                     
        }    
}
    xhr.open("GET","db_interactions.php",true);     
    xhr.send(null);
    alert("sent");
 return results;

}

plants = eval('('+results+')');

document.write(typeof(plants));
        </script>

    </div>

    </body>
</html>

1 Ответ

3 голосов
/ 22 января 2010

Вы отправляете асинхронный запрос. Это означает, что функция вернется, даже если данные еще не готовы. Но ваш вызов предполагает, что ответ JSON готов, когда вызывается getPlants. Что, очевидно, делает results неопределенным, потому что вы его не ждете.

Поставь свой

plants = eval('('+results+')');
document.write(typeof(plants));

Внутри функции xhr.onreadystatechange, чтобы она работала, или открывайте соединение как синхронное

xhr.open("GET","db_interactions.php",false);

Кстати, не используйте eval для анализа JSON , потому что код может быть введен злонамеренно. Вместо этого используйте анализатор JSON.

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