Функция, включающая XMLHttpRequest, возвращает только неопределенное значение - PullRequest
0 голосов
/ 19 октября 2019

Я разрабатываю приложение для веб-мессенджера для моего первого проекта JS. Пока все работает. Но я столкнулся с некоторыми проблемами при получении сообщений с сервера.

У меня есть функция, которая будет обновлять массив 'messages' внутри класса. Однако функция, которая извлекает сообщения с сервера, возвращает только неопределенное значение. Вот функция.

getMessagesSince(id, callback) {
        /*
        [{
            'sessionid': '',
            'username': '',
            'id': 0,
            'body': ''
        }]
        */

        var request = new XMLHttpRequest();
        request.open('GET', './getmessage.php?since=' + id.toString(), false); 

        request.onload = function() {
            //console.log(request.response);
            var jsonObject = JSON.parse(request.response);
            var output = [];

            for (var i = 0; i < jsonObject.length; i++) {
                var select = jsonObject[i];
                var messageObject = new Message(select.username, select.sessionid, select.body, select.id);

                //console.log(messageObject);

                output.push(messageObject);
            }
            return output;
        }

        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        request.send("since=" + id.toString());
    }

Функция отправляет запрос в скрипт PHP, чтобы получить сообщения со значением идентификатора, превышающим значение, определенное в id, из базы данных MySQL. Я проверил, что все эти другие функции работают должным образом.

Части, на которые следует обратить внимание, это функция request.onload, поскольку именно здесь возвращается значение. Я определил, что return output; никогда не достигается. Я определил это по времени, сколько времени требуется для выполнения функции. Время, необходимое для успешной работы функции (сервер подключен к сети), равно времени, в течение которого функция не работает (сервер отключен). Оба возвращают неопределенное значение.

Я пытался установить false в request.open('GET', './getmessage.php?since=' + id.toString(), false); в значение true. Но я получил сообщение об ошибке, в котором говорилось, что это отрицательно сказывается на работе пользователя (я не смог воспроизвести ошибку).

Я пытался использовать функции обратного вызова, которые будут определены при вызове getMessagesSince, но только полученыTypeError: callback is not a function.

Это функция обратного вызова, которую я использовал:

pushMessages(input) {
        this.messages.push(input);
    }

Я считаю, что это связано с тем, что функция возвращается до завершения выполнения. Таким образом, выдается неопределенная ошибка.

...