假设我有这段代码:
my_script_data = document.getElementById("id_php_defer__core");
if (my_script_data == undefined) {
Alert(request.responseText); // all looks good!
my_script_data = document.createElement("script");
my_script_data.setAttribute("id", "id_php_defer__core");
my_script_data.innerHTML = 'function myinitfunc() { ' + "\n" + request.responseText + "\n" + ' }';
to = document.head;
if (to != undefined) {
to.appendChild(my_script_data);
}
}
else {
Alert(request.responseText); // all looks good!
my_script_data.innerHTML = 'function myinitfunc() { ' + "\n" + request.responseText + "\n" + ' }';
eval(my_script_data.innerHTML);
}
“request.responseText”实际上是一个设置了大量值的Javascript数组声明。
在上面的代码之后,稍后会调用“myinitfunc”。
(因为它应该只包含“request.responseText”,应该更新全局(!)值数组。)
然而,虽然代码在第一次运行时起作用,但后续运行似乎什么都不做,所以我做错了什么,但是什么呢? :)
答案 0 :(得分:1)
<script>
代码无法回收。为了解决这个问题,您决定使用eval
。
但是(肯定是在严格模式下),eval
会not run in the current nor global scope。结果,声明的函数没有显示出来。
我强烈反对使用eval
来达到此目的。你说responseText
包含一个数组。通过调整一下,您可以使用JSON
来处理数据。
您还可以通过以下方式插入和删除脚本元素:
var s = document.createElement('script');
s.appendChild(document.createTextNode(request.responseText));
// ^ Equivalent to a "global eval"
(document.head || document.getElementsByTagName('head')[0]).appendChild(s);
s.parentNode.removeChild(s);
答案 1 :(得分:0)
每次调用myinitfunc()时,您是否尝试过eval()?