Я разрабатываю приложение для веб-мессенджера для моего первого проекта 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);
}
Я считаю, что это связано с тем, что функция возвращается до завершения выполнения. Таким образом, выдается неопределенная ошибка.