0

AJAX呼び出しからJavascriptグローバル変数を作成するにはどうすればよいですか?現在、未定義のエラーが発生しています。コードを関連するセクションだけにカットしました。必要に応じて追加します。

#index.php
#(Calls form.php)
  if(ajaxRequest.status == 200){
    document.getElementById("response").innerHTML = "<script">; #new
    document.getElementById("response").innerHTML += ajaxRequest.responseText;
    document.getElementById("response").innerHTML += "</script">; #new
  }



#form.php
  print("<script>var message = 'Hello World';</script>");
  print("<input type=\"button\" onClick=\"printMessage()\" />");

#index.js
#(Sent to the browser before AJAX. Executed after AJAX call.)
  function printMessage(){
    alert(message);
  }
4

2 に答える 2

1

問題は、<script>経由で追加されたタグinnerHTMLが実行されないことです。

ご覧ください:innerHTMLでスクリプトを挿入できますか?

JQueryを使用できる場合、これは機能します。

$('#response').html(ajaxRequest.responseText);

<script>次のようにJavaScriptを使用してタグを作成することもできます。

var ajax_response='var message="Hello World!";';

var sc=document.createElement('script');
sc.text=ajax_response;

document.body.appendChild(sc);

alert(message);

デモ: http: //jsfiddle.net/6ChZG/


このようなものが機能するはずです:

#index.php
#(Calls form.php)
  if(ajaxRequest.status == 200){
    var res=document.getElementById("response");
    res.innerHTML = "<input type=\"button\" onclick=\"printMessage()\" value=\"test\" />";
    var sc=document.createElement('script');
    sc.text=ajaxRequest.responseText;
    res.appendChild(sc);    
  }



#form.php
  print("var message = 'Hello World';");


#index.js
#(Sent to the browser before AJAX. Executed after AJAX call.)
  function printMessage(){
    alert(message);
  }

デモ: http: //jsfiddle.net/XbM7v/

于 2012-04-30T07:17:50.817 に答える
0

これを試して:

に置き換えvar messageますmessage。として宣言されていない変数はvar ..、グローバルスコープに追加されます。

そして、ajax呼び出しが完了したprintMessage() 後に呼び出します。

  if( (ajaxRequest.status == 200 ) && ( ajaxRequest.readyState==4 ) ){
    document.getElementById("response").innerHTML = ajaxRequest.responseText;
    //printMessage() call here...
  }

お役に立てれば。

于 2012-04-30T07:25:21.017 に答える