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 为什么不是';t my eval将json字符串转换为对象_Javascript_Json - Fatal编程技术网

Javascript 为什么不是';t my eval将json字符串转换为对象

Javascript 为什么不是';t my eval将json字符串转换为对象,javascript,json,Javascript,Json,当我执行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>Invento

当我执行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>

库存管理
无标题文件

var-xhr; var结果=getPlants(xhr,结果); 变种植物; 函数getPlants(xhr,结果){ 试一试{ xhr=newXMLHttpRequest(); }catch(微软){ 试一试{ xhr=新的ActiveXObject(“Msxml2.XMLHTTP”); }捕获(其他Microsoft){ 试一试{ xhr=新的ActiveXObject(“Microsoft.XMLHTTP”); }捕获(失败){ xhr=假; 警报(“不支持ajax”); } } } xhr.onreadystatechange=函数(){ 如果(xhr.readyState==4&&xhr.status==200){ 结果=xhr.responseText; } } open(“GET”,“db_interactions.php”,true); xhr.send(空); 警报(“已发送”); 返回结果; } 植物=评估(“(“+结果+”)”); 文件。书写(植物的类型);
您正在发出一个异步请求。这意味着即使数据还没有准备好,函数也会返回。但是您的调用假设在调用
getPlants
时JSON响应已准备就绪。这显然使
结果
未定义,因为您没有等待它

把你的

plants = eval('('+results+')');
document.write(typeof(plants));
xhr.onreadystatechange
函数中使其工作,或以同步方式打开连接

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

顺便说一下,不要使用
eval
解析JSON
,因为代码可能被恶意注入。改用JSON解析器。

您发出的是异步请求。这意味着即使数据还没有准备好,函数也会返回。但是您的调用假设在调用
getPlants
时JSON响应已准备就绪。这显然使
结果
未定义,因为您没有等待它

把你的

plants = eval('('+results+')');
document.write(typeof(plants));
xhr.onreadystatechange
函数中使其工作,或以同步方式打开连接

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

顺便说一下,不要使用
eval
解析JSON
,因为代码可能被恶意注入。请改用JSON解析器。

响应来自可信源,当我在getPlants定义之外打印结果时,它会返回正确的数据,我想知道的是,我使用eval函数时,它不会正确地反序列化数据,这是怎么回事,为了序列化我使用的php_Encode数据,您将不知道“受信任”源是否在其他地方存在导致XSS的漏洞。始终最小化攻击面。另外,JSON解析器可能比
eval
更快(在我的Safari
eval
上,解析JSON比
JSON.parse
要多花36%的时间)。响应来自可信的源,当我在getPlants定义之外打印结果时,它会返回正确的数据,我想弄清楚的是,我使用eval函数的方式有什么问题,它无法正确地反序列化数据,而要序列化我使用的php_encode数据,您将不知道“可信”源是否在其他地方存在导致XSS的漏洞。始终最小化攻击面。另外,JSON解析器可能比
eval
更快(在我的Safari
eval
上,解析JSON比
JSON.parse
要多花36%的时间)。