Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с записью в переменную (https://javascript.ru/forum/misc/35750-problema-s-zapisyu-v-peremennuyu.html)

_SR_71_ 21.02.2013 00:32

Проблема с записью в переменную
 
в функции:
function sendMessage(message) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "chat.php?message=" + message, true);
    xhr.onreadystatechange = function() {
        if(xhr.readyState != 4) return;
        if(xhr.status != 200) return;
        message = xhr.responseText; // (*)
    }
    xhr.send(null);
    return message;
}

В message не записывается результат, а остаётся такой, как была передана в функцию. Голову уже сломал над этим вопросом. По идее в функции, которая назначена на onreadystatechange, message видна и может этой функцией изменяться.
Вместо строки (*) вставлял конкретно то что должно изменятся на странице, работает, то есть ответ с сервера приходит.

Возможно проблема в этой функции:
function insertMessage() {
    var message = inMessageBox.value;
    if(message == "")
        return;
    message = sendMessage(message);  
    var outputMessage = "<span class='message'>" + message + "</span><br>";
    var lastMessage = outMessageBox.children[outMessageBox.children.length - 1];
    lastMessage.insertAdjacentHTML("afterEnd", outputMessage);
    inMessageBox.value = "";
}

danik.js 21.02.2013 00:57

У вас асинхронный запрос (третий агрумент для xhr.open()).
Поэтому return message происходит еще до того как запрос улетит к серверу. Привыкайте к асинхронному программированию. По возвращению результата с сервера делайте с ответом что вам нужно.

_SR_71_ 21.02.2013 01:39

Спасибо. Я в принципе подозревал это, но всё же отбросил эту идею.


Часовой пояс GMT +3, время: 06:27.