【发布时间】:2012-02-24 20:13:48
【问题描述】:
通过 Javascript 请求,XMLHttpRequest 会响应一些需要添加到请求页面的额外 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 是 synchronous,因为我想在此之后引用 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: value 1”。
由于其他原因,这并不像在addJSToPaged.js 中设置var checkVar 那样简单,所以我不是在寻找那种建议。
我只是使用 alert(checkVar) 作为测试,以确保在响应中通过 JS 设置了一个值。
我想我可以去掉开始和结束脚本标签并保留eval() 的方式。但是,我想知道是否有任何解决方案支持我正在寻找的东西?
谢谢。
更新
按照 Prashanth 的建议,我在 addJSToPage.js 中添加了:
var dynamicElement = document.createElement('div');
然后在 XMLHttpRequest 的响应中,我做了:
dynamicElement.appendChild = xmlhttp.responseText;
仍然没有看到 checkVar 的值。
【问题讨论】:
-
您可能需要将其注入 DOM,eval 是邪恶的。在这种情况下,您可能需要使用消息进行响应并在响应文本上发出警报。
-
@Prashanth - 这不像警报那么简单;更新了描述,因为响应将是加载更多 JS 的 JS 引用。
-
对了,注入到dom中就可以调用函数了。我想不出一个有效的用例,你只需要用 javascript 来响应。
-
上面更新了,但是还是不行。可以举个例子吗?
标签: javascript xmlhttprequest response