molily: XMLHttpREQUEST mehrmals durch onklick

Beitrag lesen

Hallo!

function starteAjax(url) {

req = new XMLHttpRequest();

Da verwendest hier eine globale Variable (wie JürgenB sagt). Du überschreibst sie beim zweiten Request. Dadurch greift dein readystatechange-Handler nicht auf das korrekte XMLHttpRequest-Objekt zu (er greift zweimal auf dasselbe zu).

Das liegt an der Asychronität. Erst wird starteAjax zweimal aufgerufen, dann nach einiger Zeit meineCallbackFkt zweimal.

Zwei Möglichkeiten:

1. Funktionen verschachteln, sodass die innere Funktion eine Closure ist, die die Variablen der äußeren Funktion konserviert:

var starteAjax = function(url) {  
  // Lokale Variable (Funktionsvariable)  
  var req = new XMLHttpRequest();  
  req.onreadystatechange = function() {  
    // Zugriff auf req  
    // req.readyState usw.  
    // req ist hier immer das korrekte Objekt  
  };  
  req.send();  
};

2. Du kannst im Handler alternativ über »this« auf das XMLHttpRequest-Objekt zugreifen:

var starteAjax = function(url) {  
  var req = new XMLHttpRequest();  
  req.onreadystatechange = meineCallbackFkt;  
};  
var meineCallbackFkt = function() {  
  // Zugriff auf this  
  // this.readyState usw.  
};

Mathias