在.js文件中,我可以在处理ajax responsetext后更新变量吗?

时间:2012-01-16 09:37:36

标签: javascript ajax xmlhttprequest

所以我有一个.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?

2 个答案:

答案 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的用途。