Мне нужна ваша помощь относительно ответов AJAX с Symfony. На моей странице у меня есть параметры выбора, и я хочу только обновить их, если что-то в БД изменилось. Теперь я загружаюсь каждые пять секунд и проверяю, не отличается ли количество данных. Но, с другой стороны, пользователи также могут редактировать / переименовывать старые параметры. Если я проверю только счетчик, обновить список невозможно. Итак, как я могу проверить, отличается ли старый ответ от нового?
Заранее спасибо!! (Мой код в JS выглядит следующим образом)
let Routing = require('../../vendor/friendsofsymfony/jsrouting-bundle/Resources/public/js/router')
let Routes = require('./js_routes')
Routing.setRoutingData(Routes)
let select_options = document.getElementById("person_names")
document.addEventListener('DOMContentLoaded', function (event) {
if (window.location.href.indexOf("entity=Person&action=new") > -1 || window.location.href.indexOf("entity=Person&action=edit") > -1){
let firstRequest = true;
let responseOld
window.setInterval(function () {
new Promise( function (resolve, reject) {
let url = Routing.generate('getNewPersonList')
let xhr = new XMLHttpRequest()
xhr.open('GET', url)
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
xhr.addEventListener('load', function (event) {
if (this.status === 200 && this.statusText === "OK"){
resolve(JSON.parse(this.responseText))
} else {
reject(JSON.parse(this.responseText))
}
})
xhr.send()
})
.then((response) => {
debugger;
if (firstRequest){
responseOld = response
firstRequest = false
// document.cookie = "Names = " + response + "; expires=Thu, 18 Dec 2019 12:00:00 UTC; path=/refreshNames";
console.info("first")
}
if (select_options.length !== response.length) {
console.info(select_options)
console.info(response)
// Drop old options
select_options.length = 0
// Fill it with new names
for (let index = 0; index < response.length; index++) {
let $option_element = document.createElement('option')
$option_element.value = response[index].id
$option_element.text = response[index].name
select_options.appendChild($option_element)
}
}
})
.catch((error) => {
console.info(error)
})
}, 5000)
}
})
Хм .. Сейчас попробую. Что делать с помощью файлов cookie?





Возможно, сохраните ответ в переменной и сравните новый ответ при каждом вызове, используя сравнение массивов stackoverflow.com/questions/21987909/…