Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 使用eval()设置全局变量_Javascript_Ajax_Eval - Fatal编程技术网

Javascript 使用eval()设置全局变量

Javascript 使用eval()设置全局变量,javascript,ajax,eval,Javascript,Ajax,Eval,使用eval设置全局变量的代码无效。就好像根本没有调用赋值,但没有发生脚本错误 <script type="text/javascript"> $(function() { setTimeout(function() { eval('var x = 1;'); alert(x); }, 0); }); </script> <div onclick="alert(x)

使用
eval
设置全局变量的代码无效。就好像根本没有调用赋值,但没有发生脚本错误

<script type="text/javascript">

    $(function() {

        setTimeout(function() {
            eval('var x = 1;');
            alert(x);
        }, 0);
    });
</script>

<div onclick="alert(x);">Click to see 'x'</div>

$(函数(){
setTimeout(函数(){
评估('var x=1;');
警报(x);
}, 0);
});
单击以查看“x”
当页面加载时,警报会显示我期望的内容;它确认x=1。但是在那之后,我点击div并得到一个javascript错误,
x
是未定义的。如何使
eval
正确添加此变量


背景:上面的代码是我正在处理的一个项目中的一个最小复制示例,在这个项目中,我们必须在AJAX响应期间执行javascript代码<代码>eval在大多数情况下工作正常,但这会导致问题。

eval在本地运行,您正在设置一个本地变量

要设置全局变量,请删除
var

<script type="text/javascript">

    $(function() {

        setTimeout(function() {
            eval('x = 1;');
            alert(x);
        }, 0);
    });
</script>

$(函数(){
setTimeout(函数(){
评估('x=1;');
警报(x);
}, 0);
});

我不建议设置全局变量,但如果必须设置,请使用
窗口
对象:

window['x'] = 1;

您可以使用
window.eval()
从全局范围运行
eval()
。这将
var
分配为
window
的变量,这就是全局变量:附加到
window
的变量

。。。但你真的不应该
eval()
被沙盒化是有原因的

除非您真的知道自己在做什么,并且相信通过
XMLHttpRequest
收到的所有信息,否则情况并非如此。这是一个鸡毛蒜皮的事情:如果你足够信任代码来执行它,那么应该对它进行足够好的编程,用
窗口作为全局变量的前缀。
首先;因此,您不需要使用
window.eval()


此外,除非您只是试图通过使用更易于管理的
XMLHttpRequest
(所有内容都是第一次…)来避免异步问题,否则您确实应该创建一个脚本标记,分配它的源代码,并将其作为子项附加到head或body标记。动态添加脚本标记甚至比使用XHR更快,特别是对于大型脚本。

为什么不使用
window.x=1相反?@asawyer我真的不在乎。我只是回答这个问题。这就是OP的代码不可用的原因working@asawyer:这是自然代码混淆的常见方式。有些人使用一些特殊的模糊处理软件,另一种是雇佣不好的开发人员。正如我在问题中所写的,评估代码是javascript,在ajax请求完成时运行。脚本由服务器生成。但这是正确的——问题在于javascript是错误的,而不是ajax处理。我的javascript感觉不够好,无法捕捉到这一点;谢谢。那么你的问题是什么?@tenfour:然后向服务器控制的团队bug提交一个bugtracker@Juan门德斯:“但这不是问题的重点”——告诉人们如何以正确的方式做事总是有意义的。只是盲目地回答OP的要求从来都不是一个好策略。OP只有在你解释好或坏的原因时才能学到东西。@Blender:这是一个“一旦我理解了解决方案,问题就变得毫无意义了”的例子。投票结束是因为太本地化了。@JuanMendes:问题的重点是帮助tenfour解决问题,而不是用胶带覆盖它。我还没有看到服务器必须像这样设置JavaScript变量的情况。