Функция, включающая XMLHttpRequest, возвращает только неопределенное значение
Я разрабатываю приложение для веб-мессенджера для моего первого проекта 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 {amp}lt; 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);
к истине. Но я получил сообщение об ошибке, сказавшее, что это отрицательно сказывается на работе пользователя (я не смог воспроизвести ошибку).
Я попытался использовать функции обратного вызова, которые будут определены при вызове getMessagesSince
но только получили TypeError: callback is not a function
.
Это функция обратного вызова, которую я использовал:
pushMessages(input) { this.messages.push(input); }
Я считаю, что это как-то связано с тем, что функция возвращается до завершения выполнения. Таким образом, выдача неопределенной ошибки.