zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden String über Ajax holen, aber warten bis geladen wird

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 11.06.2018, 11:28
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 07.10.2014
Beiträge: 68
seerose befindet sich auf einem aufstrebenden Ast
Standard String über Ajax holen, aber warten bis geladen wird

Ich hole mich über AJAX einen String, daraus baue
ich eine Bildgalerie, was eigentlich funktioniert.

in der XMLHttpRequest Routine habe ich meine Galerie Funktion integriert,
also hinter if (xmlHttp.readyState == 4)

ich würde es gerne trennen, so das erst die XMLHttpRequest (get_galerie) Routine aufgerufen wird und dann meine Galerie Funktion
a= get_galerie(id) // holt string über Ajax
galerie(a)

Aber die get_galerie ist schneller fertig als der String geladen wird.
so wird die Galerie kaputt zusammen gebaut.

Gibt es hier eigentlich eine saubere Lösung?
Dazu müsste Js solange in die get_galerie Funktion verbleiben bis der String geladen wird.
Ein Timeout müsste man dann wohl auch einbinden.


Die get_galerie hätte ich gerne auch für andere Funktion eingesetzt, dazu must halt die
galerie funktion dort raus

meine xmlHttp Methode ist schon sehr alt, funktioniert aber, geht es eigentlich
jetzt mit html5 schon eleganter?

mir fällt gerade ein, kann man keine Funktion über String starten?
a= "galerie";
in der get_galerie funktion hinter hinter if (xmlHttp.readyState == 4)
wird dann die galerie aufgerfufen, der Name musst aber in ein String stehen.


HTML-Code:
function get_galerie(id){

  
			
	var xmlHttp = null;
	// Mozilla, Opera, Safari sowie Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined') {
		xmlHttp = new XMLHttpRequest();
		}
		if (!xmlHttp) {
			// IE 6 und älter
			try {
				xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					xmlHttp  = null;
				}
			}
		}
			// Objekt erfolgreich
		if (xmlHttp) {
			 
			var formData = new FormData();
      formData.append('wert', "hol_img");
      formData.append('id', id);
      
				 
				 
			var url = "hohl_galerie.php";
			xmlHttp.open("POST", url, true);
				
				
  		xmlHttp.onreadystatechange = function () {
				if (xmlHttp.readyState == 4) {
		 	 
			b=xmlHttp.responseText;		// hier mein String
		         galerie(b)	// das hier soll raus 
				}
			};				
 
			xmlHttp.send(formData);
				  
		}			
		 
 
	}

Geändert von seerose (11.06.2018 um 11:56 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 11.06.2018, 22:44
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.868
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von seerose Beitrag anzeigen
Ich hole mich über AJAX einen String, daraus baue
ich eine Bildgalerie, was eigentlich funktioniert.

in der XMLHttpRequest Routine habe ich meine Galerie Funktion integriert,
also hinter if (xmlHttp.readyState == 4)

ich würde es gerne trennen, so das erst die XMLHttpRequest (get_galerie) Routine aufgerufen wird und dann meine Galerie Funktion
a= get_galerie(id) // holt string über Ajax
galerie(a)

Aber die get_galerie ist schneller fertig als der String geladen wird.
so wird die Galerie kaputt zusammen gebaut.

Gibt es hier eigentlich eine saubere Lösung?
Die Lösung steht doch schon in deinem Code?
Der Aufruf nach dem readyState==4

Das kannst du nicht "trennen" in dem Sinn. Du kannst lediglich (und das ist üblich) einen eigenen Callbackauruf übergeben.

In etwa so:
Code:
function get_galerie(id, cb){
...
		if (xmlHttp.readyState == 4) {
		         cb(xmlHttp.responseText);
		}
...
}
und dann rufst du die ganze Sache so aus:
Code:
get_galerie(id, function(text) { galerie(text)})
Das ist die übliche saubere Lösung.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
preg_replace treibt mich in den Wahnsinn olik Serveradministration und serverseitige Scripte 14 30.03.2009 14:30
DIV bis GANZ unten burnZ CSS 5 27.07.2008 13:14


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:52 Uhr.