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


Create/access Javascript global variable created on AJAX call

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

问题是通过innerHTML添加<script>标签不会被执行。

看看:脚本可以用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/

试试这个:

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

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

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

希望这有帮助。