Я пытаюсь обновить много 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