2011-01-20 36 views
1

我有以下設置:一個Javascript文件(包含一個Ajax將放入一個新的Div的谷歌可視化函數)和一個vbscript文件,其中包含Ajax調用的實現函數,該函數將谷歌可視化javascript寫入標籤。Javascript,可以檢查HTML中是否存在函數<script>標記?

在JavaScript文件中的Ajax調用中,我將Ajax調用的內容放入一個新的div中,並將其附加到容器div中。然後我調用其中一個google javascript函數,這是Ajax調用添加到html中的新內容。

如果我在google javascript函數調用之前有alert或setTimeOut(),它就會起作用。如果我只是立即調用它沒有的功能。因此,在新添加Ajax的JavaScript代碼可以被識別之前,似乎有一些延遲。

有沒有優雅的方式來調用沒有超時的功能?我編寫了一個while循環來保持循環,直到找到新的附加節點,但函數調用仍然無法識別。

function ProcessAjaxCall(DivID, ResponseText) 
    { 
     var NewDiv = document.createElement("div"); 
     NewDiv.id = "myscript"; 
     NewDiv.innerHTML = ResponseText; 
     document.getElementById(DivID).appendChild(NewDiv); 
     //alert('Function below only works when this outputs'); 
     MyGoogleJSFunction('Arg'); 
    } 

因此,MyGoogleJSFunction是通過Ajax調用編寫的代碼的一部分,它位於NewDiv中。

+0

嘗試使用像jQuery這樣的框架。這有一個使用Ajax的回調函數。所以你可以說:`onSuccess();` – Marnix 2011-01-20 12:13:32

回答

1

這是因爲解析器無法在JavaScript執行時重新渲染當前頁面(至少現在還沒有)。您必須重新控制以允許瀏覽器加載並執行包含的腳本。這樣做的一種方法是使用setTimeout(例如延遲0);另一個是關閉並重新打開當前腳本元素,就像Google Analytics一樣:

<script type="text/javascript"> 
    var _gaq=_gaq||[]; 
    _gaq.push(['_setAccount','UA-XXXXXXX-X']); 
    _gaq.push(['_trackPageview']); 
    (function(){ 
     var ga=document.createElement('script'); 
     ga.type='text/javascript'; 
     ga.async=true;ga.src='http://www.google-analytics.com/ga.js'; 
     var s=document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(ga,s); 
    })(); 
    _qoptions={qacct:"p-c1rF4kxgLUzNc"}; 
    /* now close this script element, so we can use functions included 
    * by the GA script */ 
</script> 
<script> 
    // … 
</script> 
相關問題