如何从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);
}
答案 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);
<小时/> 这样的事情应该有效:
#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);
}
答案 1 :(得分:0)
试试这个:
将var message
替换为message
。未声明为var ..
的变量将添加到全局范围。
并且,在 ajax调用完成后调用printMessage()
。
if( (ajaxRequest.status == 200 ) && ( ajaxRequest.readyState==4 ) ){
document.getElementById("response").innerHTML = ajaxRequest.responseText;
//printMessage() call here...
}
希望这有帮助。