Wie mache ich eine Funktion warten, bis alle jQuery Ajax-Anforderungen innerhalb einer anderen Funktion fertig sind?
Kurz gesagt, ich muss warten, bis alle Ajax-Anfragen erledigt sind, bevor ich die nächste ausführe. Aber wie?
Wie mache ich eine Funktion warten, bis alle jQuery Ajax-Anforderungen innerhalb einer anderen Funktion fertig sind?
Kurz gesagt, ich muss warten, bis alle Ajax-Anfragen erledigt sind, bevor ich die nächste ausführe. Aber wie?
Ich habe einen einfachen Weg gefunden, und zwar mit shift()
function waitReq(id)
{
jQuery.ajax(
{
type: 'POST',
url: ajaxurl,
data:
{
"page": id
},
success: function(resp)
{
...........
// check array length if not "0" continue to use next array value
if(ids.length)
{
waitReq(ids.shift()); // 2
)
},
error: function(resp)
{
....................
if(ids.length)
{
waitReq(ids.shift());
)
}
});
}
var ids = [1, 2, 3, 4, 5];
// shift() = delete first array value (then print)
waitReq(ids.shift()); // print 1
$.when
funktioniert bei mir nicht, callback(x)
anstelle von return x
funktioniert wie hier beschrieben: https://stackoverflow.com/a/13455253/10357604
Meine Lösung sieht folgendermaßen aus
var request;
...
'services': {
'GetAddressBookData': function() {
//This is the primary service that loads all addressbook records
request = $.ajax({
type: "POST",
url: "Default.aspx/GetAddressBook",
contentType: "application/json;",
dataType: "json"
});
},
...
'apps': {
'AddressBook': {
'data': "",
'Start': function() {
...services.GetAddressBookData();
request.done(function(response) {
trace("ajax successful");
..apps.AddressBook.data = response['d'];
...apps.AddressBook.Filter();
});
request.fail(function(xhr, textStatus, errorThrown) {
trace("ajax failed - " + errorThrown);
});
Das hat ganz gut funktioniert. Ich habe viele verschiedene Methoden ausprobiert, aber ich fand, dass dies die einfachste und am besten wiederverwendbare ist. Hoffentlich hilft es
Sehen Sie sich meine Lösung an:
1. fügen Sie diese Funktion (und Variable) in Ihre Javascript-Datei ein:
var runFunctionQueue_callback;
function runFunctionQueue(f, index, callback) {
var next_index = index + 1
if (callback !== undefined) runFunctionQueue_callback = callback;
if (f[next_index] !== undefined) {
console.log(index + ' Next function avalaible -> ' + next_index);
$.ajax({
type: 'GET',
url: f[index].file,
data: (f[index].data),
complete: function() {
runFunctionQueue(f, next_index);
}
});
} else {
console.log(index + ' Last function');
$.ajax({
type: 'GET',
url: f[index].file,
data: (f[index].data),
async: false,
complete: runFunctionQueue_callback
});
}
}
2. Erstellen Sie ein Array mit Ihren Anfragen, etwa so:
var f = [
{file: 'file_path', data: {action: 'action', data: 'any_data}},
{file: 'file_path', data: {action: 'action', data: 'any_data}},
{file: 'file_path', data: {action: 'action', data: 'any_data}},
{file: 'file_path', data: {action: 'action', data: 'any_data}}
];
3. eine Rückruffunktion erstellen:
function Function_callback() {
alert('done');
}
4. die Funktion runFunctionQueue mit Parametern aufrufen:
runFunctionQueue(f, 0, QuestionInsert_callback);
// first parameter: array with requests data
// second parameter: start from first request
// third parameter: the callback function
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Wie rufen Sie Ihre ursprünglichen Ajax-Anfragen auf?
2 Stimmen
Was meinen Sie mit "erledigt"? Ich verstehe es so, dass alle Anfragen entweder erfolgreich oder nicht erfolgreich abgeschlossen wurden (gelöst oder abgelehnt). Vielleicht meinen Sie aber auch "alle Anfragen wurden erfolgreich abgeschlossen" (gelöst). siehe alle Variationen in api.jquery.com/category/deferred-object