我有一個數組,通過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