Jquery-plugin blockUI funktioniert nicht mit ajax
Möchte ich block die aktuelle Seite, wenn eine bestimmte ajax-Aufruf gemacht und die Verwendung einer blockUI als message-box. Ich kann nicht einfach $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
Mein code ist der folgende..
bc.find('.submit').click(function (e) {
e.preventDefault();
if ($(this).hasClass('lock'))
return;
$.blockUI();
$(this).addClass('lock');
bc.submit();
});
var validator;
validator = bc.validate({
ignore: '',
rules: {
UserName: {
required: true
}
},
messages: {
UserName: 'must have',
},
submitHandler: function (form) {
$.ajax({
url: '/yyyy/xxxx',
type: 'POST',
data: postdata,
complete: function () {
bc.find('.submit').removeClass('lock');
},
success: function (data) {
if (data.status == 'OK') {
$.blockUI({ message: 'OK' });
......
}
else {
switch (data.status) {
case 'xxx':
......
}
$.unblockUI();
}
},
error: function () {
$.unblockUI();
alert('xxx');
}
});
}
});
Das Szenario ist, dass wenn ich auf die .submit
- Taste, wird die Seite blockiert ist, und einen ajax-Aufruf an den server, um eine Daten-Reaktion. Wenn der ajax-Aufruf erfolgreich ist, ich freigeben der aktuellen Seite und wenn Daten.status ist 'OK', zeige ich eine MessageBox (auch basierend auf blockUI plugin). Sonst zeige ich eine Fehlermeldung auf der aktuellen Seite, und klicken Sie dann entsperren.
Bearbeiten auf 2016, es gibt eine Bearbeiten, welche die Frage der Bedeutung(vielleicht aufgrund meines sehr schlechten Englisch im moment), habe ich gerollt ändern zurück hier, und machen es klar ist, bitte ändern Sie nicht weiter unten wieder.
Aber in der Tat, nur nach dem ajax-Aufruf abgeschlossen ist (debug-Schritt über den code in ajax complete handler
), dann siehe:
- ersten
$.blockUI();
excuted - ausführen
$.blockUI({ message: 'OK' })
oder nicht - dann
$.unblockUI()
genannt werden
(Oben ist, was ich meine abnormale Ausführung Sequenz von chrome oder firefox-debug-tool in der Antwort.da blockui code
sollte nicht ausgeführt werden, nachdem ajax komplett)
Es ist nicht das, was ich will, und ich kann nicht dieses heraus.
InformationsquelleAutor Mithril | 2012-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legen Sie die Block-UI in der beforeSend Funktion und die unBlockUI in die komplette Funktion, so dass Sie das Verhalten, das Sie erwarten.
Dies wird sicherstellen, dass Ihre Benutzeroberfläche zu blockieren, sobald die Anfrage gesendet wird und entsperren, sobald seine abgeschlossen..
Ich hab das gleiche problem, Sie finden keine Antwort?
In meiner situation,in dieser Ausführung Sequenz Anomalie, verursacht durch browser debug tools,chrome und firefox. Weil ich den debug-tool, um zu bestätigen, ob $.blockUI() excuted vor dem ajax-call,aber es ist immer excuted nach Schritt über die Prozedur complete ajax.Wenn ich einen Haltepunkt in server-side-code ,dann fand ich die Ausführung Sequenz normal geworden wie ich will es werden!
Ich war in der Lage, diese arbeiten, aber ich hatte, um sicherzustellen, dass die async auf true festgelegt war.
Wenn Sie
asyn:true
dann ist es ein schlechtes Zeichen. Sie besiegen den Zweck derAJAX
InformationsquelleAutor Sushanth --
Ich hatte das gleiche Problem, weil ich sync ajax-Aufruf, der aync ist falsch
Ich löste es, indem man einen ajax-call async true
InformationsquelleAutor Paresh Radadiya
können Sie Ihren code sehr viel einfacher mit einem wrapper um ajax wie ajaxBlockUI - siehe https://stackoverflow.com/a/28358070/460084
alles, was Sie tun müssen, ist fügen Sie blockUI:true, ajaxBlockUI und der tatsächlichen Sperrung und Entsperrung der Benutzeroberfläche wird intern abgewickelt werden.
InformationsquelleAutor kofifus
Das problem war eine Hinrichtung Sequenz Anomalie, verursacht durch browser-debug-tools im chrome und Mozilla firefox. Mit dem debugger, bestätigte ich, ob
$.blockUI()
ausgeführt, bevor der ajax-Aufruf oder nicht. Es war immer ausführen, nachdem ich trat über die komplette Prozedur in ajax. Gerade jetzt habe ich einen Haltepunkt in server-side-code, und ich fand, dass die Ausführung der Sequenz wird normal, wie ich will es werden!update auf 2016-01-25:
Hinweis:
abnormal execution sequence
bei einerasync call
jetzt.(Aber ich erinnere mich, damals, seta break point
auf der Linie -$.blockUI({ message: 'OK' });
im chrome-debug-tool, TypF10
(gehen weiter) , würde chrome nur einen Schritt über den break-point, und nichts heppen)abnormal execution sequence
nun, ich denke, vielleicht ist es durchblockui
zu. Denn wir sehen nicht, wie$.blockUI()
gearbeitet, vielleichtblock element function
gespeichert ist tief in der Chrom-Ausführung callback-stack. Ich kann den Haltepunkt in der falschen Zeile, Wenn diese Annahme wahr ist(also vielleicht brauchen Haltepunkt inblockui source code
)Und ich habe nicht die Arbeit mit
blockui
für viele Jahre.Wenn Sie wollen einfach nur einen block message-box, ich schlage vor,sweetalert.InformationsquelleAutor Mithril