Philipp: FFox: Probleme bei 2x Aufruf von XMLHTMLRequest

Hi

Folgender Codesnipsel verursacht Probleme beim FFox! Mit dem IE Explorer haut das ganz nett hin. Waere nett wenn mir hier jemand weiterhelfen koennte.

Und zwar moechte ich sobald ein Button gedruekt wird, dass 2 HTTPXMLRequests nacheinander ausgefuehrt werden.

var XMLrequeststate = 1;
function handleHttpResponse() {
 if (http.readyState == 4) {
 switch (XMLrequeststate) {
     case 1:
      //work of first XMLRequest;
       break;
     case 0:
         //work of second XMLRequest;
       break;
     default:alert("Error Processing XML Requests");
    }
 XMLrequeststate = XMLrequeststate - 1;
 if (XMLrequeststate >= 0) {
   XMLRequest();
 }
 }
}
function XMLRequest() {
  http.open("POST", url, true);
  http.setRequestHeader("Content-Type", "text/xml");
  http.onreadystatechange = handleHttpResponse;
  switch (XMLrequeststate) {
    case 1:
      http.send(XMLRequest1);
      break;
    case 0:
      http.send(XMLRequest2);
      break;
    default:alert("Error Processing XML Requests");
  }
}

So wie es ausschaut kommt der FFox noch zum http.send(XMLRequest2) aber danach kommt er nicht in die handleHttpResponse. Druecke ich ein zweites mal den Button wird mir korrekterweise dann der zweite XML Request durchgefuehrt. Hat hier irgendjemand eine Erklaerung fuer dieses Verhalten? Weil wie gesgt mit IE funktioniert das ohne Probleme. Waere auch fuer Tips dankbar wie ich das ganze besser loesen koennte!

Danke
Philipp

  1. Hallo,

    *seufz*, kriegst du einen Fehlermeldung?

    gruss

    --
    no strict;
    no warnings;
    79.78 cups of Coffee (Brewed) + Me = Death
    1. *seufz*, kriegst du einen Fehlermeldung?

      Nein, das ist ja auch ein Problem! Kein Warning, rein gar nichts. Mit dem IE Explorer haut es hin, waehred es mit dem FFox nicht funktioniert. Da muss ich 2 mal die XMLRequest() aufrufen. Beim ersten AUfruf wird der erste, beim zweiten klicken der zweite XMLRequest dann abgesetzt

      Gruss
      Philipp

  2. hi,

    du hast also nur _ein_ XMLHTTPRequest-objekt erzeugt, und willst mit diesem beide requests absetzen?

    ich habe zweifel, ob das funktioniert.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 你好 wahsaga,

      du hast also nur _ein_ XMLHTTPRequest-objekt erzeugt, und willst mit
      diesem beide requests absetzen?

      Das funktioniert einwandfrei. Das mache ich hier im Forum die ganze Zeit.

      再见,
       克里斯蒂安

      --
      Fortune:
      http://wwwtech.de/
  3. Hallo,

    So wie es ausschaut kommt der FFox noch zum http.send(XMLRequest2) aber danach kommt er nicht in die handleHttpResponse. Druecke ich ein zweites mal den Button wird mir korrekterweise dann der zweite XML Request durchgefuehrt. Hat hier irgendjemand eine Erklaerung fuer dieses Verhalten?

    Aus einem readystatechange-Handler kann offenbar nicht erneut ein open()/send() mit demselben XMLHttpRequest-Objekt durchgeführt werden. Entweder du erzeugst also das XMLHttpRequest-Objekt neu, wenn der zweite Request ansteht, oder du gaukelst dem Browser vor, dass open()/change() nicht im Zuge eines readystatechange-Handler aufgerufen wird (window.setTimeout(XMLRequest, 1);).

    Waere auch fuer Tips dankbar wie ich das ganze besser loesen koennte!

    Du arbeitest asynchron, willst aber, dass zwei Requests chronologisch nacheinander abgesendet werden. Ist das nicht widersprüchlich? Wenn es geht, starte die Requests parallel mit zwei (funktional, der Codem muss nicht doppelt sein) verschiedenen readystatechange-Handler-Funktionen. Ansonsten wäre vielleicht synchrones Arbeiten angebracht. Allerdings reicht es ja wie gesagt, das XMLHttpRequest-Objekt neu zu erzeugen im Zuge des Verarbeiten des readystatechange-Ereignisses mit readyState == 4.

    Mathias

    1. Hi

      Aus einem readystatechange-Handler kann offenbar nicht erneut ein open()/send() mit demselben XMLHttpRequest-Objekt durchgeführt werden. Entweder du erzeugst also das XMLHttpRequest-Objekt neu, wenn der zweite Request ansteht, oder du gaukelst dem Browser vor, dass open()/change() nicht im Zuge eines readystatechange-Handler aufgerufen wird (window.setTimeout(XMLRequest, 1);).

      Ja danke mit einem neuen XMLHTTPRequest Objekt haut das ganz gut hin!

      Du arbeitest asynchron, willst aber, dass zwei Requests chronologisch nacheinander abgesendet werden. Ist das nicht widersprüchlich? Wenn es geht, starte die Requests parallel mit zwei (funktional, der Codem muss nicht doppelt sein) verschiedenen readystatechange-Handler-Funktionen. Ansonsten wäre vielleicht synchrones Arbeiten angebracht.

      Nun ja ist ja irgendwie auch asynchron, nur das ich halt 2 Requeste anstatt nur einen abwarte! Mein CGI Programm kann leider nur einen Request abarbeiten daher spielt sich paralleles ausfuehren (noch) nicht!

      Gruss
      Philipp