mehrere Divs per Ajax laden
dude
- javascript
0 Edgar Ehritt0 dude
0 hotti0 ChrisB0 Der Martin0 hotti0 Der Martin0 Struppi
Hi,
habe Probleme 2 divs gleichzeitig zu laden.
Wer kann helfen?
http://test.dbf.de1.cc/
-> auf gal_1 klicken!
Dann wird meist nur das rechte DIV aktualisiert
bzw. wird links der gleich Inhalt wie rechts angezeigt
was jedoch falsch und für mich nicht logisch ist!
Gruß
Siggi
Hallo dude,
was da geschieht, ist absolut logisch. Du sendest zwei Requests asynchron. Sie laufen also parallel. Daher konkurrieren sie, den Du speicherst sie in ein und derselben Variable req ab. Parallel überschreiben sich nun die beiden Anfragen gegenseitig die Eigenschaft req.readyState. Das kannst Du aber verhindern, wenn Du mehrere Variablen nutzt. Ich würde Dir dazu folgendes vorschlagen:
var req=[];
function ahah(url, target) {
document.getElementById(target).innerHTML = 'Loading...';
if (window.XMLHttpRequest) {
req[target] = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req[target] = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req[target] != undefined) {
req[target].onreadystatechange = function() {ahahDone(url, target);};
var url = url + ((url.indexOf("?") == -1) ? "?" : "&") + escape(new Date().toString()); //permet de ne pas utiliser le cache
req[target].open("GET", url, true);
req[target].send("");
}
}
function ahahDone(url, target) {
if (req[target].readyState == 4) {
if (req[target].status == 200) {
document.getElementById(target).innerHTML = req[target].responseText;
} else {
document.getElementById(target).innerHTML=" AHAH Error:\n"+ req[target].status + "\n" +req[target].statusText;
}
}
}
Gruß aus Berlin!
eddi
hi eddi,
danke für den tipp. es funzt ;-)
hatte so was in der art auch vermutet.
gruß
siggi
ps: aber was ist dann synchron?
Re:
ps: aber was ist dann synchron?
synchron:
Programmausführung -> Request -> Response abwarten -> Programmausführung
asynchron:
Programmausführung -> Request -> Programmausführung nur von onreadystatechange
|
`-> Programmausführung
In Javascript wird synchron dann wie folgt notiert, wobei immer wieder die gleiche Variable genutzt werden kann:
var req=new XMLHttpRequest(); // in aller kürze für mozillas
req.open('GET','script.php',false);
// ^^^^^
req.send(p);
verarbeite(req.responseText);
Gruß aus Berlin!
eddi
Hi,
habe Probleme 2 divs gleichzeitig zu laden.
Wer kann helfen?
Nur ein Tipp, Tagging: Falls Du mehrere Requests rausschicken willst, gib denen einen Tag, ein Integer reicht völlig. Der Request kriegt einfach eine Nummer als Parameter mit, serverseitig wird diese Nummer dann in den Etag (HTTP-Header) eingebaut und so kriegst Du die Responsen wieder zsamma ;-)
Inwieweit die Browser solche Requests tatsächlich asynchron rausschicken ist eine andere Sache. Bisher musste ich immer wieder leider feststellen, dass die Browser die Requests schön brav nacheinader senden, nutzen somit die Bandbreiten nicht und verschwenden der Besucher Zeit ;-)
Hotti
Hi,
Nur ein Tipp, Tagging: Falls Du mehrere Requests rausschicken willst, gib denen einen Tag, ein Integer reicht völlig. Der Request kriegt einfach eine Nummer als Parameter mit, serverseitig wird diese Nummer dann in den Etag (HTTP-Header) eingebaut und so kriegst Du die Responsen wieder zsamma ;-)
Und wozu genau soll das jetzt gut sein?
Wenn du zusammengehörige Daten anfordern willst - wieso dann nicht ein Request, sondern mehrere?
Inwieweit die Browser solche Requests tatsächlich asynchron rausschicken ist eine andere Sache. Bisher musste ich immer wieder leider feststellen, dass die Browser die Requests schön brav nacheinader senden, nutzen somit die Bandbreiten nicht und verschwenden der Besucher Zeit ;-)
Dein fehlerhaftes Verständnis von Asynchronität in diesem Zusammenhang wurde dir doch erst letzte Tage hier erklärt.
MfG ChrisB
hi,
Wenn du zusammengehörige Daten anfordern willst - wieso dann nicht ein Request, sondern mehrere?
Ich hab ja nicht gesagt, dass es Mehrere sein müssen. Multipart Content kann selbstverständlich auch in einem Ajax-Zyklus (Request-Response) angefordert und verarbeitet werden.
Dein fehlerhaftes Verständnis von Asynchronität in diesem Zusammenhang wurde dir doch erst letzte Tage hier erklärt.
Auf meiner Seite erkläre ich die asynchrone Übertragung, da kannst Du gerne nochmal nachlesen, was das für Vorteile bringt, nicht nur für Ajax. Vielleicht stehts ja auch im Wiki* wie eine asynchrone Datenübertragung funktioniert. Oder denkst du, dass beim DSL-Anschluss die Kabel nur einfach dicker sind als früher? Und das bei den Kupferpreisen heute ... :-)
Hotti
Hi,
Dein fehlerhaftes Verständnis von Asynchronität in diesem Zusammenhang wurde dir doch erst letzte Tage hier erklärt.
Auf meiner Seite erkläre ich die asynchrone Übertragung, da kannst Du gerne nochmal nachlesen
Nein, das kann ich mir glaube ich sparen, so lange du hier noch regelmäßig zeigst, dass dein Verständnis davon nicht viel mit der Realität zu tun hat.
Btw., das was dir letzte Tage hier erklärt wurde, bezog sich IIRC auf eben diesen Artikel.
MfG ChrisB
Hallo,
Inwieweit die Browser solche Requests tatsächlich asynchron rausschicken ist eine andere Sache. Bisher musste ich immer wieder leider feststellen, dass die Browser die Requests schön brav nacheinader senden, nutzen somit die Bandbreiten nicht und verschwenden der Besucher Zeit ;-)
mir scheint, dir ist nicht klar, was man unter "asynchron" versteht.
Der Begriff "synchron" kommt aus dem Griechischen und bedeutet nichts anderes, dass zwei oder mehr Prozesse in einem definierten zeitlichen Verhältnis zueinander stehen. Somit heißt "asynchron" als Negation einfach, dass zwischen diesen Prozessen *kein* zeitlicher Zusammenhang besteht.
Mit Gleichzeitigkeit hat das aber ebensowenig zu tun wie mit streng sequentiellem Ablauf. Beides sind Sonderfälle von *synchronen* Abläufen.
Beispiel: Ich rufe im Hotel den Zimmerservice und bestelle mir eine Kanne Kaffee aufs Zimmer. Ich warte aber nicht reglos, bis der Angestellte mit dem Kaffee kommt, sondern bringe mein Gepäck in Ordnung, lese etwas in der Zeitung oder schaue mit im Fernsehen die Nachrichten an. Irgendwann, zu einem mehr oder weniger zufälligen Zeitpunkt, klopft es dann an der Tür, und mein Kaffee ist da.
Das ist asynchron.
Ciao,
Martin
moin,
Beispiel: Ich rufe im Hotel den Zimmerservice und bestelle mir eine Kanne Kaffee aufs Zimmer. Ich warte aber nicht reglos, bis der Angestellte mit dem Kaffee kommt, sondern bringe mein Gepäck in Ordnung, lese etwas in der Zeitung oder schaue mit im Fernsehen die Nachrichten an. Irgendwann, zu einem mehr oder weniger zufälligen Zeitpunkt, klopft es dann an der Tür, und mein Kaffee ist da.
Das ist asynchron.
Genau. Du hast es ausgezeichnet auf den Punkt gebracht. Wesentlich ist dabei, dass über einen a. Layer die Ordnung aufgehoben ist. Und es ist ein Tagging erforderlich, damit am Ende einer a. Übertragung die Ordnung wieder hergestellt werden kann.
Und ich soll das nicht verstanden haben, hallo!?
Mir scheint eher, dass json-Nutzer das ISO OSI Referenzmodell nicht verstanden haben, und fleißig einen Presentation Layer zur Datenübertragung benutzen. Und warum sollte es nicht möglich sein, mehrere Ajax-Requests so zu senden, dass die nicht aufeinander warten müssen? Genau: Es ist nur deswegen nicht möglich, weil die Browser das nicht können!
Schönen Tag Euch ;-)
Hotti
Hallo,
[...] zu einem mehr oder weniger zufälligen Zeitpunkt, klopft es dann an der Tür, und mein Kaffee ist da.
Das ist asynchron.
Genau. Du hast es ausgezeichnet auf den Punkt gebracht.
:-)
Wesentlich ist dabei, dass über einen a. Layer die Ordnung aufgehoben ist.
Was immer du mit einem "a. Layer" meinst - ich glaube, du bist in Gedanken schon wieder (oder immer noch?) bei einem konkreten Anwendungsfall, nicht bei der allgemeinen Definition. Es gibt auch Vorgänge, die sozusagen von Natur aus schon asynchron sind, so dass es keine Ordnung gibt, die aufgehoben werden könnte. Zum Beispiel Schüler, die morgens zur Schule gehen: Sie gehen alle unkoordiniert zu verschiedenen Zeiten von verschiedenen Orten los (dass manche auch in Grüppchen gehen, ist damit nicht ausgeschlossen), gehen auf verschiedenen Wegen und treffen zu verschiedenen Zeiten im Klassenzimmer ein. Asynchron, ohne dass es eine Ordnung gab, die durch irgendwas aufgehoben wurde.
Und es ist ein Tagging erforderlich, damit am Ende einer a. Übertragung die Ordnung wieder hergestellt werden kann.
Sagen wir's so: Wenn du ein geordnetes System hast, dann Teile des Systems verschiedenen asynchron laufenden Prozessen unterwirfst, musst du natürlich irgendwann die ursprüngliche Ordnung wiederherstellen (synchronisieren).
Welche Maßnahme dazu sinnvoll ist, hängt vom konkreten Fall ab; beim asynchronen Versand mehrerer Nachrichten, die eigentlich einen festen Bezug zueinander haben, ist Tagging eine gute Methode.
Und ich soll das nicht verstanden haben, hallo!?
Dein vorangegangener Beitrag las sich für mich so, als sei Gleichzeitigkeit oder zumindest zeitliche Überlappung deiner Ansicht nach Voraussetzung für Asynchronität. Dem wollte ich widersprechen: Asynchronität schließt zwar Gleichzeitigkeit bzw. Überlappung nicht aus, das ist aber keine notwendige Voraussetzung.
Und warum sollte es nicht möglich sein, mehrere Ajax-Requests so zu senden, dass die nicht aufeinander warten müssen? Genau: Es ist nur deswegen nicht möglich, weil die Browser das nicht können!
Ist das denn wirklich so? Ich habe die AJAX-Thematik noch nie selbst untersucht, aber ich hätte behauptet, dass auch überlappende Requests möglich sind - vorausgesetzt natürlich, man verwendet getrennte Request-Objekte, sonst gibt's Durcheinander.
So long,
Martin
Und warum sollte es nicht möglich sein, mehrere Ajax-Requests so zu senden, dass die nicht aufeinander warten müssen? Genau: Es ist nur deswegen nicht möglich, weil die Browser das nicht können!
Unsinn!
Struppi.