Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2013, 00:32
Интересующийся
Отправить личное сообщение для _SR_71_ Посмотреть профиль Найти все сообщения от _SR_71_
 
Регистрация: 15.03.2012
Сообщений: 15

Проблема с записью в переменную
в функции:
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 = "";
}
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2013, 00:57
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

У вас асинхронный запрос (третий агрумент для xhr.open()).
Поэтому return message происходит еще до того как запрос улетит к серверу. Привыкайте к асинхронному программированию. По возвращению результата с сервера делайте с ответом что вам нужно.
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2013, 01:39
Интересующийся
Отправить личное сообщение для _SR_71_ Посмотреть профиль Найти все сообщения от _SR_71_
 
Регистрация: 15.03.2012
Сообщений: 15

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить функцию при запуске увидеть ГЛОБАЛЬНУЮ переменную? возжаждавший Элементы интерфейса 8 23.02.2017 01:27
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58