所以我有一个.js文件,我需要从PHP文件中检索变量。不,我不能让服务器将.js视为.php。
所以无论如何,我有这个脚本
function getPHPVariable(){
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
variableIWant = ajaxRequest.responseText;
}
}
ajaxRequest.open("GET", "phpfile.php", true);
ajaxRequest.send(null);
}
现在我需要在另一个字符串中使用variableIWant,但每次调用它时都会显示为undefined。我知道变量正在被正确发送,因为只需添加alert(variableIWant);在responseText行下面,它正确地提醒我变量。
为简单起见,是否可以获取variableIWant并在另一个字符串中使用它,或者我是SOL,因为它必须等待readystate?
答案 0 :(得分:1)
您在哪里定义variableIWant
?
如果你只是在onreadystatechange
函数中分配它,它就在该函数的范围内可用。
所以你必须在所有函数之外声明它或写
window.variableIWant = ajaxRequest.responseText;
更新:就像Quentin指出的那样,只需将代码放入onreadystatechange
函数中......
或者:
ajaxRequest.onreadystatechange = function() {
if (ajaxRequest.readyState == 4) {
variableIWant = ajaxRequest.responseText;
longString = "The variable I retrieved is: "+variableIWant+". Isn't this nice?";
document.getElementById('theDivPart').innerHTML = longString;
}
}
或:
ajaxRequest.onreadystatechange = function() {
if (ajaxRequest.readyState == 4) {
update(ajaxRequest.responseText);
}
}
function update(value) {
longString = "The variable I retrieved is: " + value + ". Isn't this nice?";
document.getElementById('theDivPart').innerHTML = longString;
}
http://jsfiddle.net/roberkules/JgZ2B/
顺便说一下,有没有理由不使用javascript框架?例如像jquery一样照顾所有的ajax麻烦?你在jquery中的代码:<script type="text/javascript">
$.get('http://sumary.org/phpfile.php').done(function(data){
$(function() {
$('#theDivPart').html('The variable I retrieved is: ' + data + '. Isn\'t this nice?');
});
});
</script>
<body>
<div id="theDivPart"></div>
</body>
答案 1 :(得分:0)
为简单起见,是否可以获取variableIWant并在另一个字符串中使用它,或者我运气不好因为它必须等待readystate?
必须等待调用readystate函数,并且在HTTP响应返回之前不会发生这种情况。
将您的逻辑放在您分配给readystate的函数中,这就是readystate的用途。