javascript - 执行使用包含脚本标签的 XMLHttpRequest 编写的 Javascript?

标签 javascript xmlhttprequest response

通过 Javascript 请求,XMLHttpRequest 响应一些额外的 Javascript,这些 Javascript 需要添加到请求页面的页面。

使用 eval(),如果响应类似于:

alert('This is the js response');

...那么这就可以正常工作了。

但是,返回的文本可能如下所示:

<script language="javascript">var checkVar='checkVar: value 1';</script>

但最有可能的是:

<script src="http://www.somesite.com/setCheckVarValue.js"></script> 

...需要在页面上加载额外的 JS。

我已确保 XMLHttpRequest同步,因为我想在此之后立即引用 checkVar。

所以:

<script type="text/javascript" src="http://www.mysite.com/addJSToPage.js" />
// at this point, since this is a synchronous call, page processing waits
// until the response is received that needs to include the additional JS
// to load; this, for testing sets the value of checkVar

<script type="text/javascript" >
    alert(checkVar);
</script>

警报消息应显示为“checkVar:值 1”。

由于其他原因,这不仅仅是在 addJSToPaged.js 中设置 var checkVar 那么简单,所以我不是在寻找那种建议。

我只是将 alert(checkVar) 用作测试,以确保已通过 JS 在响应中设置值。

我想我可以去掉开始和结束的脚本标签,并保持 eval() 的方式。但是,我想知道是否有任何解决方案支持我正在寻找的东西?

谢谢。

更新

按照 Prashanth 的建议,我在 addJSToPage.js 中添加了:

var dynamicElement = document.createElement('div');

然后在 XMLHttpRequest 的响应中,我做了:

dynamicElement.appendChild = xmlhttp.responseText;

仍然没有看到 checkVar 的值。

最佳答案

不管你在做什么都可能是个坏主意这一事实,Prashanth 将其插入 DOM 的想法是正确的。您也可以去除标签并评估为“正常”。

不要忽视以下事实:1) eval 是邪恶的,2) 动态加载远程代码是糟糕的,3) 同步 AJAX 是特别糟糕的,我要说的是:

除非您知道自己在做什么,否则eval任何东西都不是一个好主意,它很难调试,会暴露出大量的安全漏洞和各种其他问题。然后,您通过加载远程代码来复合这一点,这显然是以您无法控制的方式生成的,因为您无法只获得脚本。同步 Ajax 不好,因为在 javascript 中只有一个线程,在 Ajax 上阻塞实际上会锁定整个页面,直到它被加载,因为即使像滚动这样的事情也会产生 javascript 事件,当前繁忙的引擎必须检查处理程序。虽然请求在您的本地计算机上进行得很快,但连接速度慢或质量差的人可能会等待一段时间,直到连接超时时间。 AJAX 中的“A”是异步的,并且有充分的理由使用回调,它们存在是有原因的。

如果您只是进行数据传递,请使用 JSON,它是 JavaScript 对象表示法,一种简单的数据格式,恰好也是有效的 JavaScript。您可以在其上使用 eval,但我建议使用 JSON 解析器,我认为大多数现代浏览器都内置了它们(这里可能是错误的)。 JSON 之所以好,是因为它可以表达复杂的数据结构,易于生成和解析并得到广泛支持。

关于javascript - 执行使用包含脚本标签的 XMLHttpRequest 编写的 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9107847/

相关文章:

ajax - XMLHttpRequest 跨站点脚本在同一台服务器上但端口不同

javascript - 获取最接近组件 Angular 5 的元素

javascript:按类拆分 html

javascript - 如何在相对定位的网页中将DIV float 到内联DIV的第二行?

javascript - 获取 xmlHTTP 请求不起作用

java - 在 Spring Boot 中返回 JSON 对象作为响应

javascript - 桌面音频捕获不适用于 Chrome 应用程序

javascript - jqXHR - http-status-code-403(但状态码为 0)

android - Android 中的 ReCaptcha V2 响应错误 12008

javascript - gulp - 完成时发出哔哔声