2012-03-03 35 views
0

私はこのコードを持っていると仮定し実行します。はJavascriptコードを交換し、それが

my_script_data = document.getElementById("id_php_defer__core"); 
if (my_script_data == undefined) { 
    Alert(request.responseText); // all looks good! 
    my_script_data = document.createElement("script"); 
    my_script_data.setAttribute("id", "id_php_defer__core"); 
    my_script_data.innerHTML = 'function myinitfunc() { ' + "\n" + request.responseText + "\n" + ' }'; 
    to = document.head; 
    if (to != undefined) { 
    to.appendChild(my_script_data); 
    } 
} 
else { 
    Alert(request.responseText); // all looks good! 
    my_script_data.innerHTML = 'function myinitfunc() { ' + "\n" + request.responseText + "\n" + ' }'; 
    eval(my_script_data.innerHTML); 
} 

「request.responseText」は、実際に設定された値の多くが付いているJavascriptの配列の宣言です。

上記のコードの後、 "myinitfunc"は後で呼び出されます。 (それが唯一の「request.responseText」を含まなければならないとして、グローバルな(!)の値の配列を更新する必要があります。)コードは、最初の実行で動作しながら、

しかし、その後の実行には、何もしないように見えます、私は間違って何かをしていますが、何ですか? :)

答えて

1

<script>タグはリサイクルできません。これを修正するには、evalを使用することにしました。

ただし、(厳密には厳密なモードで)evalnot run in the current nor global scopeです。その結果、宣言された関数は表示されません。

この目的でevalを使用することを強くお勧めします。 responseTextには配列が含まれています。ちょっと微調整すれば、JSONを使ってデータを扱うことができます。

次の方法でも、スクリプト要素の挿入および削除することができます見て例の通り

var s = document.createElement('script'); 
s.appendChild(document.createTextNode(request.responseText)); 
//^Equivalent to a "global eval" 
(document.head || document.getElementsByTagName('head')[0]).appendChild(s); 
s.parentNode.removeChild(s); 
+0

元々、新しい

0

myinitfunc()を呼び出すたびにeval()を試しましたか?

+0

を応答テキストを取得するとき、私はEVALを購入します。 innerHTML = eval(...)を試してみることをお勧めしますか? – Tom

+0

私はあなたのコードを実際に試しているわけではありませんが、あなたが実際に式を評価したので初めてのことです。申し訳ありませんが私の答えは完全に間違っているかもしれませんが、私の頭に来る最初のものです。 – multimediaxp

関連する問題