Ich habe ein Problem in Ajax-Funktion, wo der beforeSend des zweiten Ajax-Post vor der Fertigstellung ausgeführt wird: Funktion des ersten Ajax. Die Ladeklasse, die ich dem Platzierer vor dem Senden hinzufüge, arbeitet für den ersten Ajax-Aufruf. Sobald jedoch die erste Ajax-Anforderung abgeschlossen ist, wird die Klasse entfernt und wird bei den zweiten und weiteren Aufrufen nie wieder angehängt (erinnern Sie sich an rekursive Aufrufe). Während des Debuggens wird angezeigt, dass die beforeSend-Funktion der zweiten Ajax-Aufrufe zuerst aufgerufen wird und die vollständige Funktion des ersten Ajax-Aufrufs später aufgerufen wird. Was offensichtlich ist, weil die Rückdaten, die auf der Seite von dem ersten Ajax-Anruf eingefügt werden, den zweiten Anruf starten.Jquery Ajax beforeSend und Erfolg, Fehler und vollständig
Kurz gesagt ist es durcheinander. Gibt es eine Möglichkeit, dies zu klären?
Der Funktionscode ist wie folgt
function AjaxSendForm(url, placeholder, form, append) {
var data = $(form).serialize();
append = (append === undefined ? false : true); // whatever, it will evaluate to true or false only
$.ajax({
type: 'POST',
url: url,
data: data,
beforeSend: function() {
// setting a timeout
$(placeholder).addClass('loading');
},
success: function(data) {
if (append) {
$(placeholder).append(data);
} else {
$(placeholder).html(data);
}
},
error: function(xhr) { // if error occured
alert("Error occured.please try again");
$(placeholder).append(xhr.statusText + xhr.responseText);
$(placeholder).removeClass('loading');
},
complete: function() {
$(placeholder).removeClass('loading');
},
dataType: 'html'
});
}
und die Daten enthält die folgenden Ausschnitt von Javascript/jquery die überprüft, und beginnt eine andere Ajax-Request.
<script type="text/javascript">//<!--
$(document).ready(function() {
$('#restart').val(-1)
$('#ajaxSubmit').click();
});
//--></script>
Ich versuchte Ihre Lösung und es gab mir überraschende Ergebnisse. Zuerst habe ich die var requestNumber = 0 und ++ in vorSenden verwendet und es komplett/immer überprüft. Es zeigt die requestNumber == 2 und - Ergebnisse in 1, die in der Prüfung false zurückgibt und die Ladeklasse nicht entfernt wird. Es wird jedoch nie entfernt, weil ich nicht weiß, warum, es erzeugt eine zusätzliche Anforderung für die gesamte Sequenz. Jetzt ist der Täter gefunden, ich denke, es ist einfach zu lösen oder eine Bug-Anfrage zu posten. –
Wenn die Funktion fehlschlägt, wird sowohl der Fehler als auch der Fehler angezeigt. Was, wenn ich es nur komplett haben möchte, kann ich am Ende des Vorgangs '1 zurückgeben', damit es nicht zu einem Fehler kommt? –