Могу ли я обновить переменную в файле .js после обработки ajax responsetext? - PullRequest
0 голосов
/ 16 января 2012

Итак, у меня есть файл .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); 

}

Теперь переменная IWant - это то, что мне нужно использоватьпозже в другой строке, но каждый раз, когда я ее называю, она отображается как неопределенная.Я знаю, что переменная отправляется должным образом, потому что, просто добавив предупреждение (variableIWant);под строкой responseText он правильно предупреждает меня о переменной.

Итак, для простоты, можно ли получить переменную IWant и использовать ее в другой строке, или я SOL, потому что она должна ожидать состояние готовности?

Ответы [ 2 ]

1 голос
/ 16 января 2012

Где вы определяете variableIWant?

Если вы просто присваиваете его внутри функции onreadystatechange, это просто доступно в рамках этой функции.

Так что вы должны либо объявитьвне всех функций или напишите

window.variableIWant = ajaxRequest.responseText;

ОБНОВЛЕНИЕ: , как указывает Квентин , просто поместите код внутри функции 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>
0 голосов
/ 16 января 2012

Так что для простоты возможно ли получить переменную IWant и использовать ее в другой строке, или мне не повезло, потому что она должна ждать состояние готовности?

Она имеетждать вызова функции readystate, и этого не произойдет, пока не вернется HTTP-ответ.

Поместите свою логику в функцию, которую вы назначаете для readystate, для чего и предназначен readystate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...