代码之家  ›  专栏  ›  技术社区  ›  JBH

为什么在我eval()时,Ajax调用的responseText会出现“undefined”这个词?

  •  -4
  • JBH  · 技术社区  · 7 年前

    HTML

    <html><head>
    <style>#popup{border:1px solid black;background:#eadcce;padding:10px;margin:35px;display:none;}</style>
    <script>
    function popup(){
        var z;
        if(window.XMLHttpRequest){z=new XMLHttpRequest();}else{z=new ActiveXObject("Microsoft.XMLHTTP");}
        z.onreadystatechange=function(){if(z.readyState==4&&z.status==200){
                if(z.responseText != ''){
                        document.getElementById('popup').innerHTML=eval(z.responseText);
                        document.getElementById('popup').style.display="block";
                }
        }}
        z.open("POST",'/test2.php');z.send();
    }
    </script></head><body>
    Push the button to open the popup: <button onclick="parent.popup();">Open Popup</button>
    <div id="popup"></div>
    </body></html>
    

    test2.php

    console.log("test");
    

    除了弹出窗口中出现“undefined”(未定义)一词外,一切都很好。有人知道为什么吗?我正在使用Firefox 55.0.3。

    1 回复  |  直到 7 年前
        1
  •  2
  •   apsillers    7 年前

    eval 计算JavaScript代码并返回最后一个计算语句的结果。函数 console.log undefined eval('console.log("test")') also returns 未定义 (after printing the string 测试浏览器日志)。

    如果您不希望对话框中包含 未定义 ,不要使计算的JavaScript字符串中的最后一个语句成为对返回的函数的调用 未定义 . 例如,字符串

    console.log("test"); "foobar";
    

    将返回字符串 foobar 当使用评估时 ,因为这是最后一条语句的值。

    类似地,字符串

    console.log("test"); ['a', 'b'].indexOf('a');
    

    将返回 0 计算时,因为这是 indexOf 请提交最终声明。