Обновите несколько div с помощью AJAX - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь обновить много div в html-таблице.Я взял пример кода из https://www.easy -coding.de / wiki / Entry / 64-Mehrere-DIV-Container-mit-AJAX-aktualisieren / и в целом он работает как следует.

Каждый div, который необходимо обновить, имеет уникальный идентификатор (например, «s-1», «s-2», «s-3», ...) и содержит следующий фрагмент скрипта:

<div id="s-<?php echo $contact_array_row['id']; ?>">initial content</div><script type="text/javascript">up.push('s-<?php echo $contact_array_row['id']; ?>');</script>

Это мой модифицированный Java-скрипт обновления:

/**
 * xxx [..] by http://www.easy-coding.de
 * 
 * @param url
 * @param poll      
 */
function UpdateManyDivs(url, poll, tab) {
    this.url = url;
    this.poll = poll ? poll : 750;
    this.list = [];
    this.timer = null;
    this.tab = tab;

    /**
     * adds elem
     * @param   id      string as id
     */
    this.push = function(id) {
        this.list.push(id);
    };

    /**
     * sends single request
     * @param loop  boolean     
     */
    this.fire = function(loop) {
        ajaxPost(this.url + '?' +this.list.join('&'), 'seed='+ new Date().getTime() + '&tab=' + tab, function(up) {
            return function() {
                if (this.readyState == 4 && this.status == 200) {
                    if(loop) {
                        // start timer
                        up.start();
                    }

                    var data = eval('(' + this.responseText + ')');
                    for(var key in data) {
                        document.getElementById(key).innerHTML = data[key];
                    }
                }
            };
        }(this));
    };

    /**
     * stops auto updater
     */
    this.stop = function() {
        window.clearTimeout(this.timer);
    };

    /**
     * starts auto updater
     */
    this.start = function() {
        this.timer = window.setTimeout(function(up) {
            return function() {
                up.fire(true);
            };
        }(this), this.poll);
    };

}

Он вызывается со следующей однострочной:

var up = new UpdateManyDivs('include/callback.php', 1000, event_id);

Проблема в том, что большинстводанные записываются в переменную $ _GET.Если таблица, содержащая div, слишком велика, она больше не работает.Вместо этого я хотел бы использовать переменную $ _POST и поэтому изменил следующую строку:

ajaxPost(this.url + '?' +this.list.join('&'), 'seed='+ new Date().getTime() + '&tab=' + tab, function(up) {

... на эту:

ajaxPost(this.url, '?' +this.list.join('&') + '&seed='+ new Date().getTime() + '&tab=' + tab, function(up) {

В моем PHP-скрипте обратного вызова я изменилследующий цикл foreach:

foreach(array_keys($_GET) as $identifier) {
    $identifier_array = explode("-", $identifier);
    $data[$identifier] = getStatusMYSQL($identifier_array[1],$identifier_array[0],$_POST['tab']);
}

... к этому:

foreach(array_keys($_POST) as $identifier) {
    $identifier_array = explode("-", $identifier);
    $data[$identifier] = getStatusMYSQL($identifier_array[1],$identifier_array[0],$_POST['tab']);
}

К сожалению, это не работает, и после нескольких часов, пытаясь это исправить, я вышел изидеи.

Есть что-нибудь, что мне не хватает?

Спасибо, relkai

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...