Hallo Leute,
ich hab hier eine kleine Ajax Engine, welche auch soweit ganz gut funktioniert.
Nun hab ich aber auf meiner seite, 2 Elemente die stetig aktualisiert werden soll. (Bei jedem Klick).
Der Grundcode war dieser:
function makePOSTRequest(url, parameters) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
document.getElementById("loading-indicator").style.display = 'block';
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
document.getElementById("loading-indicator").style.display = 'block';
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
document.getElementById("loading-indicator").style.display = 'block';
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.open('POST', url, true);
http_request.onreadystatechange = alertContents;
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var result = http_request.responseText;
document.getElementById("loading-indicator").style.display = 'none';
document.getElementById('result').innerHTML = result;
} else {
document.getElementById("ajax-error").innerHTML = '(((raus gemacht weil zu lang)))';
document.getElementById("ajax-error").style.display = 'block';
document.getElementById("loading-indicator").style.display = 'none';
}
}
}
function lade_menue(dateiname, group) {
var linka = 'http://localhost/ajax/' + dateiname + '.php';
makePOSTRequest(linka, '');
}
Meine Modifikation schaut so aus:
function makePOSTRequest(url, parameters, extra) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
document.getElementById("loading-indicator").style.display = 'block';
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
document.getElementById("loading-indicator").style.display = 'block';
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
document.getElementById("loading-indicator").style.display = 'block';
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
if(extra == 'admin') {
http_request.open('POST', './ajax/admin/submenue.php', true);
http_request.onreadystatechange = alertContents1;
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
} else {
http_request.open('POST', './ajax/submenue.php', true);
http_request.onreadystatechange = alertContents1;
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
http_request.open('POST', url, true);
http_request.onreadystatechange = alertContents;
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var result = http_request.responseText;
document.getElementById("loading-indicator").style.display = 'none';
document.getElementById('result').innerHTML = result;
} else {
document.getElementById("ajax-error").innerHTML = '(((raus gemacht weil zu lang)))';
document.getElementById("ajax-error").style.display = 'block';
document.getElementById("loading-indicator").style.display = 'none';
}
}
}
function alertContents1() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var result = http_request.responseText;
document.getElementById("loading-indicator").style.display = 'none';
document.getElementById('submenue').innerHTML = result;
} else {
document.getElementById("ajax-error").innerHTML = '(((raus gemacht weil zu lang)))';
document.getElementById("ajax-error").style.display = 'block';
document.getElementById("loading-indicator").style.display = 'none';
}
}
}
function lade_menue(dateiname, group, extra) {
var linka = 'http://localhost/ajax/' + dateiname + '.php';
makePOSTRequest(linka, '', extra);
}
Nun, erstens find ich es schon irgendwie doof, dass ich 2 verschiedene alertContents Funktionen nehmen muss, ich hab versucht irgendwie die id des zu ladenden Divs zu übertragen, dass funktioniert aber aus irgendwelchen gründen gar nicht.
Aufrufen zu ich sie in den Links folgendermaßen:
onClick="lade_menue('admin/admin', '', 'admin');"
oder, wenn der Menüpunkt nicht zum Adminbereich gehört:
" onClick="lade_menue('admin/admin', '', '');"
Bei der Modifikation lädt er steht immer nur den 1. http_request , den 2. ignoriert er komplett und zeigt mir die entsprechende Fehlermeldung (hatte die unterschiedlichen meldungen markiert um sie auseinander zu halten)
Wenn ich was vergessen haben sollte, oder etwas unklar ist, fragt bitte einfach.
Ich bin recht Ratlos, wäre also über jeden Ratschlag sehr dankbar.
Gruß,
Jackson