Изменяйте параметры, только если что-то изменилось через AJAX Response - PullRequest
0 голосов
/ 07 января 2019

Мне нужна ваша помощь относительно ответов 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.log("first")
                    }
                    if (select_options.length !== response.length) {
                        console.log(select_options)
                        console.log(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.log(error)
                })
    }, 5000)
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...