2010-12-02 13 views
0

myscript.phpコードをハンドラページに挿入します。プロトタイプAjax.Updater評価関数Javascript関数とHTML

handler.php


var myArr = Array(); 
function myfunc(){ 
// some code 
handleArray(myArr); 
} 

function handleArray(arr){ 
    // some code 
} 

$("container").observe('click', function(evt){ 
     new Ajax.Request('myscript.php', { 
     method:'get', 
     evalScripts: 'true', 
     onFailure: function(e){ 
      console.log(e); 
     }, 
     onSuccess: function(t){ 
      $("container").update(t); 
      myfunc(arr); 
     } 
     }); 

}); 

myscript.php

<script type="text/javascript">
var myArr = Array("hello", "world");
</script>
<div id="abc">some html code</html>

基本的に私は私のhandlで私の関数を定義している:ここではソースですerページ、myscript.phpは、ハンドラページが処理するために必要なデータを保持します。上記はmyscript.phpにAjaxリクエストを行いますが、返されるコードは評価されません。これをhtmlとして扱う代わりにObject Objectとして表示します。同じコードをjQueryに移植し、datatype:"Script"を設定しても、すべて正常に動作します。 jQueryへの切り替えは、コードベース全体がプロトタイプの上に構築されて以来、私にとっては選択肢ではありませんが、返されたページをスクリプトとして扱うためのプロトタイプをどのように持つことができるかを知りたいと思います。

匿名関数として関数をラップし、evalJSフラグをオンにして同様のスレッドPrototype Ajax.Updater Eval Javascript Functionsがあることに気付きましたが、変数と関数のカップルがあるため、私の場合は回避策のようには見えません私はそれらのすべてを匿名にする方法は知られていません。あなたがもっと情報を必要とするなら、どんな助けも大いに感謝され、私に知らせてくれます。

答えて

0

評価されたスクリプトブロックは、Ajaxの機能の範囲内で処理されるので、...

var myArr = Array("hello", "world"); 

はその関数内のローカル変数になります。それは後で利用できず、廃棄されます。代わりに、返されたスクリプト(myscript.php)をグローバルmyArrに更新してください。

myArr = Array("hello", "world"); 
+0

私のケースでは、変数を入れることは、変数がグローバル変数であるため、オプションです。この変更を行っても問題は解決しません。 –

関連する問題