funktion soll warten bis fertig geladen

luchs3

Erfahrenes Mitglied
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?

Code:
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');
        }
    }
}

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

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

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

Javascript:
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);
        }
    }
}

Javascript:
function main_list()
{
    var main_list = document.getElementById('main_list');
 
    get_data('main=crm&id=kon_all', function(data) 
        //Hier die Daten verarbeiten
    });
}
 
Super danke******
Macht es eigentlich einen Unterschied, ob ich diese Variante oder sjax verwende, wenn die gesamte Funktion auf die Abfrage angewiesen ist?
 
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?
 
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.
 

Neue Beiträge

Zurück