Korrekte Möglichkeit, jQuery-Ajax zu durchlaufen und Argumente zu übergeben

Ich möchte ein für allemal das Problem lösen, eine ajax Anfrage zu loeschen und 'index' hinein zu geben (das Problem unten):

for (var index = 0; index < 4; index++) {
    $.ajax({
        url: 'http://graph.facebook.com/',
        dataType: 'jsonp',
        success: function(json) {
            console.log(json[index]);
        }
    });
}

In diesem Code innerhalb jedes 'Erfolg' Callback 'Index' wird 3. Aber ich möchte Callback mit 0, 1, 2, 3 aufrufen. Viele Leute platzieren Ajax Anfrage innerhalb einer Schließung:

for (var index = 0; index < 4; index++) {
    (function(index){$.ajax({
        url: 'http://graph.facebook.com/',
        dataType: 'jsonp',
        success: function(json) {
            console.log(json[index]);
        }
    });
    })(index);
}

Was ist meiner Meinung nach ein großer Fehler - was ist, wenn die Anfrage zu der Zeit nicht da sein wird? Die 'json'-Variable wird' undefiniert 'sein.

Hat jemand von euch einen richtigen Weg, um dieses Problem zu lösen?

0
Beacouse ruft sofort an und wartet nicht auf die Antwort der Daten.
hinzugefügt der Autor Oskar Szura, Quelle
Vielleicht habe ich einen anderen Fehler gemacht als ... ok ich werde es nochmal versuchen. Außerdem werde ich mehr über dieses Problem lesen. Danke an euch alle.
hinzugefügt der Autor Oskar Szura, Quelle
Ich verstehe nicht, warum Sie denken, dass Schließung hier eine schlechte Lösung ist.
hinzugefügt der Autor thefourtheye, Quelle
@OskarSzura Aber die Daten kommen asynchron.
hinzugefügt der Autor thefourtheye, Quelle
hinzugefügt der Autor elclanrs, Quelle
@OskarSzura Ich glaube nicht, dass die Variable json undefined ist, weil die success -Funktion in $. Ajax ist ein Callback und wird ausgeführt, sobald die AJAX-Anfrage erfolgreich ist, so dass Sie sicher sein können, dass json dort nie undefiniert ist. Also denke ich, dass die Schließung eine gute Idee ist.
hinzugefügt der Autor Arnelle Balane, Quelle

1 Antworten

Actually the JSON will not be undefined.
If you would break the following code apart it would become more clear:
So instead of this:

for (var index = 0; index < 4; index++) {
    (function(index){$.ajax({
        url: 'http://graph.facebook.com/',
        dataType: 'jsonp',
        success: function(json) {
            console.log(json[index]);
        }
    });
    })(index);
}

... du kannst es auch so schreiben:

function myFunction(index) {
    $.ajax({
            url: 'http://graph.facebook.com/',
            dataType: 'jsonp',
            success: function(json) {
                console.log(json[index]);
            }
    });
}

// and call it like this

for (var index = 0; index < 4; index++) {
    myFunction(index);
}

As you might already see, how are any of those two variables going to change by another call while they are defined inside the function?

(On a side note: I think it actually looks cleaner this way)

0
hinzugefügt
JavaScript - Deutsche Gemeinschaft
JavaScript - Deutsche Gemeinschaft
3 der Teilnehmer

In dieser Gruppe sprechen wir über JavaScript.