2012-12-12 90 views
0

我遇到一個問題,我使用JavaScript將ajax HTML內容加載到頁面上的元素,並試圖在加載的內容中執行JavaScript,但這不起作用。JavaScript沒有在Ajax加載內容上執行(沒有jQuery)

我不是(也不能)在這個項目上使用jQuery。

中的JavaScript我使用加載Ajax內容的樣子:

var loadedobjects = ""; 
var rootDomain = "http://" + window.location.hostname; 

function ajaxPage(url, containerId){ 
    var pageRequest = false; 
    pageRequest = new XMLHttpRequest(); 

    pageRequest.onreadystatechange = function(){ 
     loadpage(pageRequest, containerId); 
    } 

    preventCache = (url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime(); 
    pageRequest.open('GET', url+preventCache, true); 
    pageRequest.send(null); 
} 

function loadpage(pageRequest, containerId){ 
    if (pageRequest.readyState == 4 && (pageRequest.status==200 || window.location.href.indexOf("http") == -1)){ 
     document.getElementById(containerId).innerHTML = pageRequest.responseText; 
    } 
} 

正如你所看到的,我通過一個URL(HTML頁面),以功能ajaxPage()

ajaxPage()函數被調用在一個單獨的.js文件中,就像這樣:

ajaxPage('test.html', 'ajax-wrapper'); 

這是工作,的test.html正在裝入ID爲'ajax-wrapper'的元素,但test.html頁面中沒有JavaScript正在工作。

這裏是的test.html頁面的樣子(只是普通的HTML):

<div class="t-page-title"> 
    View Thread 
</div> 

<script> 
    alert('hello'); 
</script> 

即使是一個簡單alert('hello');上加載HTML不點火。該頁面沒有被緩存,所以這不是問題。如果我使用jQuery,我會知道該怎麼做,但是對於找到一個僅限於JavaScript的解決方案,我有點困惑。有什麼建議麼?

+0

如何這段代碼實際上叫做?現在它實際上並沒有任何東西。 –

+0

ajaxPage函數在獨立的.js文件中調用ajaxPage('test.html','ajax-wrapper');'正在工作,正在加載** test.html **內容,但沒有javascript是在加載的內容中工作 –

+0

「test.html」中究竟有什麼內容? –

回答

1

當您使用innerHTML時,標記將被複制到目標元素,但腳本不會執行。您需要額外的eval步驟才能執行腳本。

jQuery有一個名爲globalEval的函數,沒有jQuery,你需要編寫你自己的。

[更新]下面是一個iframe的變化,這可能有助於解決您的問題:http://jsfiddle.net/JCpgY/

你的情況:

ifr.src="javascript:'"+pageRequest.responseText+"'"; 

的標準行爲有一個div:http://jsfiddle.net/JCpgY/1/

+0

是所有jQuery ajax函數(get/ajax/load等)調用的globalEval jQuery函數。 。)?我假設它使用eval(),如果可能的話,我寧願遠離... –

+0

不是每個ajax函數,但它被稱爲$ .load,這正是你正在尋找的。沒有eval就很難執行腳本。 – Christophe

+0

謝謝,我確實使用'eval()'得到了它的工作,但現在我遇到了一個像'innerHTML'這樣的問題,因爲當'eval()'被觸發時,HTML內容還不存在(無法設置屬性'innerHTML'爲null) –