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 messagemessage。未声明为的变量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 回答