Php 创建/访问AJAX调用时创建的Javascript全局变量

Php 创建/访问AJAX调用时创建的Javascript全局变量,php,javascript,ajax,Php,Javascript,Ajax,如何从AJAX调用创建Javascript全局变量?我当前收到一个未定义的错误。 我把代码删减到了相关的部分。如果需要的话,我会加上更多 #index.php #(Calls form.php) if(ajaxRequest.status == 200){ document.getElementById("response").innerHTML = "<script">; #new document.getElementById("response").inne

如何从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);
  }
#index.php
#(调用form.php)
如果(ajaxRequest.status==200){

document.getElementById(“response”).innerHTML=“问题是通过
innerHTML
添加的
标记无法执行

看看:

如果您可以使用JQuery,这将起作用:

$('#response').html(ajaxRequest.responseText);
#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);
  }

您还可以使用JavaScript创建
标记,如下所示:

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

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

document.body.appendChild(sc);

alert(message);
演示:


像这样的方法应该会奏效:

$('#response').html(ajaxRequest.responseText);
#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);
  }
#index.php
#(调用form.php)
如果(ajaxRequest.status==200){
var res=document.getElementById(“响应”);
res.innerHTML=“”;
var sc=document.createElement('script');
sc.text=ajaxRequest.responseText;
关于儿童(sc)的决议;
}
#form.php
打印(“var消息='Hello World';”;
#index.js
#(在AJAX之前发送到浏览器。在AJAX调用之后执行。)
函数printMessage(){
警报(信息);
}
演示:

试试这个:

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

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

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

希望这有帮助。

我怀疑定义“var message”的代码在index.js加载后正在执行,因此无法看到变量。如果作为测试,您在index.js中放置“var message=”test”;它是否按预期工作?是的,这就是它当前的工作方式。因为这似乎是一个范围问题,有没有办法将var添加到文档?您可能做错了。为什么不直接使用[JSONP][1]?[1]:这有点麻烦,但您可以在页面上“放置”一个隐藏的HTML元素,并在form.php中设置它的值,然后在printMessage期间使用getElementById()再次检索它如果我把函数放在自己的文件中,然后打印一个包含innerHTML的JS文件,这行吗?用Javascript创建标记,然后在AJAX调用过程中创建变量行吗?类似于上面的内容:(只需遵循一般逻辑,而不是实际的JS函数调用)