У меня есть приложение чата, которое вызывает $.post()
каждую пару секунд.
var currentPage = "chat-room-1";
var myJSONString = null;
$.post("getJSON.php?view_page=currentPage", function(response) {
myJSONstring += response;
});
Каждый $.post()
возвращает и добавляет все новые записи в базу данных для моего текущего чата.
Каждый раз currentPage
изменения переменных я набор myJSONstring
в null
(я иду в другой чат)
Проблема возникает, когда я изменить currentPage
переменного в то время как $.post()
обрабатываются, но не возвращаются значения еще, потому что сервер занимает больше времени, чтобы обработать его. Это создает экземпляр, который добавляет старые данные чата и новые данные в myJSONstring
в myJSONstring
.
Решение. Я вижу, что в любое время я меняю currentPage
Я также лишаю никаких функций $.post()
которые еще не вернули значение. Это возможно?
Назначить вызов ajax с помощью функции IIFE и игнорировать ответ, если чат изменился.
var currentPage = "chat-room-1";
var myJSONString = null;
(function(chatRoom) {
$.post("getJSON.php?view_page=" + chatRoom, function(response) {
if (chatRoom == currentPage) {
myJSONstring += response;
}
});
})(currentPage);
PS: Я скопировал ваш код в своем ответе. Но вы должны прислушаться к совету @Bergi (+1).
вы можете прервать запрос ajax следующим образом:
var jqxhr = $.post("getJSON.php?view_page=currentPage", function(response) {
myJSONstring += response;
});
jqxhr.abort();
но не уверен, что он на 100% надежный в вашем случае.
другим решением может быть размещение вашего содержимого чата в массиве. И верните текущую страницу в ответе сервера.
var currentPage = "chat-room-1";
var chatRoomStr = [];
chatRoomStr[currentPage] = '';
$.post("getJSON.php?view_page=currentPage", function(response) {
chatRoomStr[response.currentPage] += response.chatContent;
});
null
. Используйте массив[]
и отправьте проанализированные результаты из ответа на него.