2011-01-20 6 views
1

私は以下の設定をしています:Javascriptファイル(Ajaxが新しいDivに入れるGoogleビジュアライゼーション機能を含む)とvbscriptファイル(タグ内にGoogle視覚化javascriptを書き込むAjax呼び出しの実装機能を含む)。Javascriptでは、機能がHTML <script>タグに存在するかどうかチェックできますか?

javascriptファイルのAjax呼び出しでは、Ajax呼び出しの内容を新しいdivに入れて、これをコンテナdivに追加します。私は、Ajax呼び出しがhtmlに追加している新しいコンテンツである、Googleのjavascript関数の1つを呼び出します。

GoogleのJavaScript関数呼び出しの前に警告またはsetTimeOut()がある場合、それは機能します。私はすぐにそれをdoesntの関数を呼び出す場合。新しい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

答えて

1

これは、JavaScriptが実行されているとき(少なくとも未だ)パーサーが現在のページを再レンダリングできないためです。ブラウザに付属のスクリプトをロードして実行させるには、コントロールを戻す必要があります。これを行う1つの方法は、setTimeout(例えば、0の遅延)を使用しています。もう1つは、Googleアナリティクスのように、現在のスクリプト要素を閉じて再オープンすることです。

<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> 
関連する問題