Мастер вкладок jQuery с проверкой на стороне сервера

Я создал мастер извлечения, используя вкладки пользовательского интерфейса jQuery на веб-сайте Asp.Net MVC 3. Каждая вкладка мастера загружает частичное представление, содержащее форму. Если форма действительна, я отправляю данные формы и сохраняю их в базе данных.

В настоящее время я могу проверить проверку на стороне клиента, и, если текущая вкладка недействительна, предотвратить выбор следующей / предыдущей вкладки при нажатии следующей или предыдущей кнопки, используя метод, описанный здесь http://jqueryui.com/demos/tabs/#...prevent_switching_to_the_tab_on_click_depending_on_form_validation

Однако не вся проверка может быть выполнена на стороне клиента, поскольку нам необходимо выполнить некоторые проверки на стороне сервера. Поэтому, если вкладка проходит проверку на стороне клиента, я отправляю форму и проверяю ответ, возвращенный сервером. Если проверка на стороне сервера проходит, возвращается пустая строка, но если это не удается, я возвращаю то же частичное представление для этой вкладки.

Вот функция выбора в моем селекторе вкладок jQuery UI:

select: function (event, ui) {

            var checkOutTabs = $(".checkout-tabs").tabs();
            var currentTabIndex = checkOut.getSelectedTabIndex();
            var currentTab = $(".checkout-step").get(currentTabIndex);

            var isValid = checkOut.validateTab(currentTab, ui.index);

            //prevent tab change
            if (!isValid) {
                return false;
            }

            var form = $(currentTab).find("form");

            //Submit this tab
            $.post(form.attr("action"), form.serialize(), function (data) {

                if (!data) {
                    checkOutTabs.tabs("enable", ui.index + 1);
                    return true;
                } else {
                    $(currentTab).find(".checkout-step").parent().html(data);
                    return false;
                }

            });
        }

Проблема, с которой я столкнулся, заключается в том, что как только я вызываю метод jQuery $ .post (), вкладки переключаются на следующую вкладку, независимо от того, возвращаю ли я true или false. Я нашел сообщение (Лучший способ создания вкладок jQuery), в котором похожая реализация, но они не сообщали об этой проблеме. Я что-то делаю не так или это ожидаемое поведение?


person Jeremy    schedule 19.05.2011    source источник


Ответы (1)


$.post возвращается немедленно, так как это асинхронно

возможно, вам нужно заблокировать (используя async = false в $ .ajaxOptions или что-то в этом роде), пока не будет получен ответ, а затем вернуть то, что вы хотите, изменив переменную с более широким охватом

person Grooveek    schedule 19.05.2011