• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Testen ob Seite geladen ist (mit Ajax)

king.ralph

New member
Hallo zusammen,

vorweg ich bin blutiger Anfänger und beschäftige mich erst wenige Wochen mit JS PHP SQL usw.
Ich wollte so eine Art Warenkorb schreiben und habe folgenden Ansatz:

Die ausgewählten Waren werden in einem JS Array gespeichert. Wenn man den Warenkorb öffnet lade ich mittels Ajax eine Tabelle in der ich dann von JS das Array eintrage.
Die Daten werden jedoch nicht in die Tabelle eingetragen es sei denn ich setze ein "alert();" vor die for/next Schleife. Ich vermute es liegt daran, dass die Tabelle (bzw die Form) noch nicht geladen ist wenn die JS Funktion versucht das Array in die Form zu schreiben, also dass die Form nicht gefunden wird.

Wie kann ich warten bis die mit Ajax geladene Seite tatsächlich geladen ist so dass die id bzw die Form gefunden wird.

Oder hab ich da einen Denkfehler im gesammten Konstrukt.

Hoffe das war jetzt nicht zu wirr. Wie gesagt bin was diese Sprachen angehnt noch Anfänger.


Hier der Ajax Code (den habe ich 1 zu 1 aus einem Tut übernommen)

Code:
function setRequest(url) {

	// Request erzeugen
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Mozilla, Safari, Opera
	} else if (window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}

	// überprüfen, ob Request erzeugt wurde
	if (!request) {
		alert("ERROR PLEASE TRY AGAIN LATER");
		return false;
	} else {

		// Request öffnen
		request.open('get', url);
		
		// Request auswerten
		request.onreadystatechange = interpretRequest;
		
		
		// Request senden
		request.send(null);

	}
}



	// Request auswerten
	function interpretRequest() {
		switch (request.readyState) {
			// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
			case 4:
				if (request.status != 200) {
						alert("ERROR PLEASE TRY AGAIN LATER");
				} else {
					var content = request.responseText;
					// den Inhalt des Requests in das <div> schreiben
					document.getElementById('Angebotstabelle').innerHTML = content;
				}
				break;
			default:
				break;
		}
	}

Das ist der Button der erst die Tabelle lädt und dann die Funktion startet, welche das Array schreibt

HTML:
    <td align="center" valign="top" bgcolor="#F7F7F7" id="Chart"><input type="button" name="button" id="MakeOfferButton" onClick="setRequest('Tabelle.php'); _set_uget();" value="Zum Warenkorb"></td>


Das ist die Funktion welche das Array in die Tabelle schreibt ( Warenkorb ist Globale Variable)

Code:
function _set_uget() 
{



for (var i = 0; i < Warenkorb.length; i++) {
	
document.getElementById("yougetlist").innerHTML = '<table width="480" height="30" id="GG'+Warenkorb[i][0]+'"  border="1"><tr><th width="56" height="20" scope="col"><input name="textfield" type="text" id="GGI'+Warenkorb[i][0]+'" value="'+Warenkorb[i][1]+'" size="8"></th><th width="9" align="center" scope="col">/</th><th width="40" align="center" scope="col">'+Warenkorb[i][2]+'</th><th width="10" align="left" scope="col">x</th><th width="334" align="left" scope="col">'+Warenkorb[i][3]+'</th><th width="38" onclick="" bgcolor="#0F1AE9" style="color: rgba(244,244,244,1); font-style: italic;" align="center" scope="col">-</th></tr><tr><td height="4" colspan="6"></td></tr></table>'+document.getElementById("yougetlist").innerHTML; 


}


}
 
Zuletzt bearbeitet:
Servus,

um dir helfen zu können wäre es gut, wenn du auch den betreffenden Code hier hinterlegst.

Grüße

ToM80
 
Update,

ich habe es jetzt so gelöst, dass ich die Tabelle, die sich in der php Datei befunden hat welche ich über Ajax laden wollte in JS erzeuge. Wenn jemand dennoch eine Idee hat wie man das oben beschriebene Problem löst, dann wäre ich noch interessiert.

Besten Dank
 
ich weiss gar nicht wo ich anfangen soll.
also erst mal um dein problem zu lösen, ein request dauert ein paar sekunden. du startest diesen und rufst im anschluss _set_uget auf. zu diesem zeitpunkt ist die antwort aber noch nicht eingetroffen. und selbst wenn die seite gecacht wurde, und die antwort somit schon da, wird immer erst der code für ein event vollständig abgearbeitet (onClick) ehe ein anderes an die reihe kommt (onreadystatechange). du musst also _set_uget in interpretRequest aufrufen.
Code:
...
document.getElementById('Angebotstabelle').innerHTML = content;
_set_uget();
...
aber:
* mit wenigen Wochen js/php/sql sollte man keinen warenkorb implementieren, außer zu lernzwecken
* inline eventhandler tragen weder zur lesbarkeit noch zur wartbarkeit des codes bei (trennung von inhalt, layout und funktionalität)
* alerts sind nicht geeignet zur fehlerbehandlung
* das
Code:
document.getElementById("yougetlist").innerHTML = '<table width="480" height="30" id="GG'+Warenkorb[i][0]+'"  border="1"><tr><th width="56" height="20" scope="col"><input name="textfield" type="text" id="GGI'+Warenkorb[i][0]+'" value="'+Warenkorb[i][1]+'" size="8"></th><th width="9" align="center" scope="col">/</th><th width="40" align="center" scope="col">'+Warenkorb[i][2]+'</th><th width="10" align="left" scope="col">x</th><th width="334" align="left" scope="col">'+Warenkorb[i][3]+'</th><th width="38" onclick="" bgcolor="#0F1AE9" style="color: rgba(244,244,244,1); font-style: italic;" align="center" scope="col">-</th></tr><tr><td height="4" colspan="6"></td></tr></table>'+document.getElementById("yougetlist").innerHTML;
kann kein mensch lesen/verstehen/warten => template
 
Zurück
Oben