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:

  1. ersten $.blockUI(); excuted
  2. ausführen $.blockUI({ message: 'OK' }) oder nicht
  3. 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.

Sie können erheblich vereinfachen Ihr code durch die Verwendung von ajaxBlockUI finden Sie unter stackoverflow.com/a/28358070/460084

InformationsquelleAutor Mithril | 2012-09-26

Schreibe einen Kommentar