Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

"Doppel" Ajax - 2 Contents Laden

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
« Letzte Änderung: 22.05.09, 16:38:33 von Jackson »

Antworten zu "Doppel" Ajax - 2 Contents Laden:

hast du mittlerweile eine Lösung gefunden?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Hab mir den Code nicht detailliert angeschaut, aber warum wird hier überhaupt versucht, das Rad neu zu erfinden? Es gibt gute Ajax-Frameworks, die schon lange über solche Kinderkrankheiten hinweg sind :)

z.B.: http://www.prototypejs.org/

greez 8)
JoSsiF

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Oh Gott, dass alte Dingen hier ausgegraben...

Ja klar, ich arbeite mittlerweile sehr sehr viel mit Prototype. :-)
Danke aber nochmal für den Hinweis.

Wie und ob ich das jetzt gelöst habe, weiß ich aber nicht mehr. :P Ich arbeite an dem Projekt zur Zeit nicht. Schulischer Stress etc. hat mich bisher davon abgehalten.
Mit Prototype dürfte das eigentlich nicht mehr so das Problem darstellen. :)

Gruß,
Jackson 


« Video Portal ohne Konverter funktion!SMF Forum, Registrierung »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Unreal Engine
Die Unreal Engine ist eine Spiel-Engine der Firma Epic Games. Es handelt sich dabei um eine spezielle Laufzeitumgebung für Computerspiele, welche den Spielverlauf st...

Klickrate
Das Wort Klickrate gibt das Verhältnis vom Anklicken der Werbebanner zum Anklicken der Internetseite an auf der sich die Werbung befindet. An dieser Rate werden beis...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...