【问题标题】:Why when I eval() the responseText from an Ajax call does the word "undefined" appear?为什么当我 eval() 来自 Ajax 调用的 responseText 时会出现“未定义”这个词?
【发布时间】:2017-10-11 20:55:37
【问题描述】:

我有一个如下所示的简单测试。它工作正常,但出于某种原因,“未定义”一词出现在弹出窗口中。没有什么能让我理解什么是未定义的。有没有人经历过这种情况?

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");

一切都很好,除了“未定义”这个词出现在我的弹出窗口中。有谁知道为什么?我使用的是 Firefox 55.0.3。

【问题讨论】:

  • 哈哈。不,你没有抓住重点。
  • 因为您正在评估的内容没有返回值。不复杂。
  • 这与问题 JDB 无关。
  • var s = document.createElement('script'); s.src = '/test2.php'; codeThatAppendsToHeader(s); 例如。你要做的就是创建一个脚本标签并附加它。但是,您将无法读取其内容以获取模态文本,您必须通过其他方式获取它,例如在返回的 js 中调用函数

标签: javascript ajax eval


【解决方案1】:

eval 评估 JavaScript 代码并返回最后一个评估语句的结果。函数console.log返回undefined,所以eval('console.log("test")') also returnsundefined(after printing the stringtest`到浏览器的日志)。

如果您不希望对话框包含 undefined,请不要将评估的 JavaScript 字符串中的最后一个词干作为对返回 undefined 的函数的调用。例如,字符串

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

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

同样,字符串

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

在评估时将返回 0,因为这是最后一条语句中 indexOf 调用的返回值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多