Rolf b: Gültigkeit JS-Variable global?

Beitrag lesen

Unter der Annahme, dass der Code so aussieht wie gezeigt - sprich: makeRequestObject endet mit der Zuweisung an requestObj und die 6 Zeilen von reportIframeHeight stehen genau so hintereinander - kann es weder eine Race Condition noch ein Überschreiben sein. makeRequestObject wird synchron als Helper aufgerufen und das Ergebnis sofort verwendet; da JavaScript singlethreaded[1] ist, sollte das passen.

Ich sehe drei Fehlermöglichkeiten:

  • Irgendwo in makeRequestObject steht ein unschuldiges var requestObj herum
  • Irgendwo in reportIframeHeight steht ein unschuldiges var requestObj herum (gerne auch weiter unten, das schleicht sich dann heimlich zum Start der Funktion)
  • makeRequestObject und das davor stehende var requestObj befinden sich entgegen Deiner Überzeugung nicht im globalen Scope.

Das Requestobjekt zurückzugeben statt es in die globale Flora zu pflanzen ist aber auf jeden Fall der bessere Weg. Ich weiß nicht, ob man einen XMLHttpRequest wiederverwenden kann oder sollte. Vermutlich nicht. Insofern macht es wenig Sinn, das Objekt global auf Halde zu haben und das Singleton-Pattern zu realisieren, nach dem es hier aussieht. Ablauf sollte sein: Request erzeugen, abfeuern, Eventhandler drankleben, vergessen. Der Rest geschieht im Eventhandler.

Rolf


  1. Ja ich weiß, es gibt Web Worker, aber die haben einen eigenen globalen Scope ↩︎