创建/访问在AJAX调用上创建的Javascript全局变量

时间:2012-04-30 06:38:01

标签: php javascript ajax

如何从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);
  }

2 个答案:

答案 0 :(得分:1)

问题是通过<script>添加的innerHTML标记无法执行。

查看:Can scripts be inserted with innerHTML?

如果你可以使用JQuery,这将有效:

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

您还可以使用JavaScript创建<script>代码:

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/

答案 1 :(得分:0)

试试这个:

var message替换为message。未声明为var ..的变量将添加到全局范围。

并且,在 ajax调用完成后调用printMessage()

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

希望这有帮助。