Machen Funktionen warten, bis AJAX-Aufruf mit jQuery

Ich versuche zu entwickeln, die eine Klasse in JavaScript, die ich verwenden kann, um Zugang zu einem laden der erfassten Daten mit einem AJAX-request einfach. Das problem ist nur, ich brauche, um die Mitglieder der Klasse zugänglich nur einmal der AJAX-Aufruf abgeschlossen ist. Idealerweise das, was ich möchte, um am Ende, ist etwas, wo ich anrufen kann dies in einem Skript:

courses.getCourse('xyz').complete = function () {
    //do something with the code
}

Und dies wird nur ausgelöst, nachdem der AJAX-Aufruf wurde abgeschlossen, und die Daten-Strukturen in der "Klasse" bereit sind, verwendet werden. Im Idealfall möchte ich nicht erstellen müssen .komplett-Mitglied für jede Funktion in der Klasse

Hier ist die "Klasse" ich versuche, so weit:

var model_courses = (function() {

    var cls = function () {

        var _storage = {}; //Used for storing course related info
        _storage.courses = {}; //Used for accessing courses directly
        _storage.references = new Array(); //Stores all available course IDs

        var _ready = 0;
        $.ajax({
            type: "GET",
            url: "data/courses.xml",
            dataType: "xml",
            success: function(xml) {
                $(xml).find("course").each(function() {

                    _storage.courses[$(this).attr('id')] = {
                        title       : $(this).find('title').text(),
                        description : $(this).find('description').text(),
                        points      : $(this).find('points').text()
                    }
                    _storage.references.push($(this).attr('id'))

                })

            }
        })

        console.log(_storage.courses)

    }
    cls.prototype = {
            getCourse: function (courseID) {
                console.log(cls._storage)
            },
            getCourses: function () {
                return _storage.courses
            },
            getReferences: function (),
                return _storage.references
            }

    }
    return cls
})()

Im moment getCourse wird ausgelöst, bevor der AJAX-request abgeschlossen ist und es offensichtlich keine Daten für den Zugang.

Alle Ideen werden sehr geschätzt, im stecken auf dieser!

  • Ruft courses.getCourse('xyz', function (course) {...}) nicht akzeptabel? Das ist die standard-Methode zum Umgang mit asynchronen Operationen.
InformationsquelleAutor Brad Morris | 2012-04-25
Schreibe einen Kommentar