# funktion soll warten bis fertig geladen



## luchs3 (15. September 2010)

Hi, 
Ich möchte eine globale GET funktion erstellen. soweit funktioniert das auch, nur bis meine Daten geladen sind, bekomm ich schon die Meldung Variable nicht definiert.
Wie kann ich die aufrufende Funktion zwingen das laden abzuwarten?


```
function get_data(sending_data)
{
    var httpRequestObject = new XMLHttpRequest ();
    httpRequestObject.open ('GET', 'php/main.php?' + sending_data);
    httpRequestObject.onreadystatechange = handleReadyStateChange;
    httpRequestObject.send (null);

    function handleReadyStateChange ()
    {
        if (httpRequestObject.readyState == 4 && httpRequestObject.status == 200)
        {
            daten = httpRequestObject.responseXML.getElementsByTagName('kunde');
        }
    }
}
```


```
function main_list()
{
    var main_list = document.getElementById('main_list');

    get_data('main=crm&id=kon_all');
....
```

niko


----------



## CPoly (15. September 2010)

Ein "warten" gibt es in Javascript nicht. Stattdessen musst du eine Callback-Funktion nutzen.


```
function get_data(sending_data, callback)
{
    var httpRequestObject = new XMLHttpRequest ();
    httpRequestObject.open ('GET', 'php/main.php?' + sending_data);
    httpRequestObject.onreadystatechange = handleReadyStateChange;
    httpRequestObject.send (null);
 
    function handleReadyStateChange ()
    {
        if (httpRequestObject.readyState == 4 && httpRequestObject.status == 200)
        {
            daten = httpRequestObject.responseXML.getElementsByTagName('kunde');
            callback(daten);
        }
    }
}
```


```
function main_list()
{
    var main_list = document.getElementById('main_list');
 
    get_data('main=crm&id=kon_all', function(data) 
        //Hier die Daten verarbeiten
    });
}
```


----------



## luchs3 (16. September 2010)

Super danke******
Macht es eigentlich einen Unterschied, ob ich diese Variante oder sjax verwende, wenn die gesamte Funktion auf die Abfrage angewiesen ist?


----------



## CPoly (16. September 2010)

luchs3 hat gesagt.:


> Macht es eigentlich einen Unterschied, ob ich diese Variante oder sjax verwende, wenn die gesamte Funktion auf die Abfrage angewiesen ist?



Tut mir leid, ich weiß nicht was du meinst. Vielleicht kannst du es anders formulieren.


----------



## luchs3 (16. September 2010)

Wenn sämtliche Abläufe in der aufrufenden Funktion auf die Daten der Abfrage angewiesen sind, wäre es dann nicht gleich einfacher eine synchrone Abfrage zu verwenden?


----------



## CPoly (16. September 2010)

Dann blockiert aber das gesamte JavaScript. Das bedeutet, du kannst während die Abfrage läuft keine Events abarbeiten (Klicks, Mausbewegungen, Tastendruck) und auch keine Animationen laufen lassen oder eben *irgendetwas* anderes.


----------



## luchs3 (17. September 2010)

Das ist natürlich ein Argument.
Super, danke


----------

