如何从 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...
}
希望这有帮助。