mavmedved
4/23/2014 - 12:54 PM

form_ajax.js

function form_ajax(form_name, done_callback){
    $('form[name='+form_name+']').submit(function(e){
        var fail_content = document.createElement('div');
        $(fail_content).addClass('alert alert-error');
        $(fail_content).html('<button type="button" class="close" data-dismiss="alert"> × </button>');
        var success_content = document.createElement('div');
        $(success_content).addClass('alert alert-success');
        $(success_content).html('<button type="button" class="close" data-dismiss="alert"> × </button>');
        var self = $(this)
        self.find('.alert').remove();
        var src = $(this).attr('action')
        var data_field = $(this).serializeArray()
        $.ajax({
            beforeSend : function(){
                self.addClass('disabled').find('input, button, textarea').attr('disabled', true)
            },
            type : 'post',
            async : false,
            dataType : 'json',
            cache : false,
            url : src,
            data : data_field
        }).done(function(data){
            if(data.ok) {
                if(data.redirect){
                    return window.location = data.redirect
                }
                if (data.message){
                    $(success_content).append(data.message)
                }
                else{
                    $(success_content).append('<p>Форма успешно отправлена.</p>')
                }
                self.prepend(success_content)
                if (done_callback && typeof(done_callback) === "function") { 
                    self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
                    done_callback();
                }
            } else if(data.error) {
                $(fail_content).append('<p>Не удалось отправить форму. Пожалуйста, исправьте следующие ошибки:</p>')
                $(fail_content).append('<ul></ul>');
                $.each(data.error, function(key, value){
                    $(fail_content).find('ul').append('<li>'+value+'</li>')
                })
                self.prepend(fail_content)
                self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
            } else {
                if (data.message){
                    $(fail_content).append(data.message)
                }
                else{
                    $(fail_content).append('<p>Неизвестная ошибка. Пожалуйста попробуйте ещё раз позднее.</p>')
                }
                self.prepend(fail_content)
                self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
            }
        }).fail(function(data){
            $(fail_content).append('<p>Не удалось отправить форму. Пожалуйста попробуйте ещё раз позднее.</p>')
            self.prepend(fail_content)
            self.removeClass('disabled').find('input, button, textarea').removeAttr('disabled')
        })
        return false;
    })
}