我有一个数组,通过ajax调用与页面的其余部分一起更新,替换我的页面的全部内容。我的<script>
标签位于主体内部,我在这些脚本标签(用id引用)上明确运行eval()
。Javascript eval()不起作用
现在,如果我做了alert(array)
,我得到了更新后的值,但是我的Javascript中使用数组内容的函数从未更新过,它会挂在旧数组值上,不管更新如何。
这是eval()
应该做的伎俩......
eval(document.getElementById('otherScripts').innerHTML);
eval(document.getElementById('transition').innerHTML);
<?php
javascript.="pauseTimes[$i]=$paustime"
?>
这结束了这样的Javascript数组的东西:
pausTimes[0]=3000
pausTimes[1]=3000
pausTimes[2]=3000
pausTimes[3]=3000
就像我说的,做一个alert()
时在这个数组的内容上,它显示正确的更新值,但是下面的这个小函数不会更新。这是因为如果从它自己的高速缓存吸引这些数组值:
function slideshow(slide) {
if (pauseTimes[slide]>0) {
$('#slide'+slide).fadeIn(1500).delay(pauseTimes[slide])**.fadeOut(1500,function(){slideshow(slide+1);});
}
else {
ajaxUpdate();
}
}
上方的关键部分是一个大胆,在这里我不断地从第一,同步页面加载使用旧的,最初的数组值。之后,无论数组pauseTimes
的内容是什么,都保持不变。
脚本元素的内容是什么?你可以发布一个你传递给eval的代码的sniplet吗? – 2011-03-23 12:22:48
你真的必须找到一个解决方案,而不使用eval()。在你的情况下,你可以很容易地返回(通过Ajax)一组数字,然后使用for-loop将这些数字设置为pauseTimes。您不必使用eval并使用脚本文本污染DOM元素。 – 2011-03-23 12:25:45
你可以发布#otherScripts的内容吗?那是你eval()的代码吗? – picardo 2011-03-23 12:29:07