如何在yii2中发送ajax表单

时间:2015-01-24 16:58:36

标签: yii2

我需要在yii2应用中从html表单发送数据。我需要使用ajax从这个表单发送数据并从服务器获取响应以输出它。在yii 1.0中我使用了非常有用的帮助器ajaxSubmitButton,我找不到如何在yii2中使用ajax从表单发送数据。你能告诉我怎么做吗?有没有关于它的文章?

谢谢。

2 个答案:

答案 0 :(得分:11)

Yii ActiveForm在其生命周期的许多阶段都支持JavaScript事件。您可以使用beforeSubmit事件来实现您的目标。在JavaScript中:

$(document).ready(
    $('#myform').on('beforeSubmit', function(event, jqXHR, settings) {
        var form = $(this);
        if(form.find('.has-error').length) {
            return false;
        }

        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success: function(data) {
                // do something ...
            }
        });

        return false;
    }),
);

请注意,您可以通过从事件回调中返回false来停止正常提交表单。

答案 1 :(得分:0)

在服务器验证规则的提交失败时重新加载表单

$form.on('beforeSubmit', function (event, jqXHR, settings) {

        if ($form.find('.has-error').length) {
            return false;
        }

        $.ajax({
            url: $form.attr('action'),
            type: 'post',
            data: $form.serialize(),
            success: function (datos, status, xhr) {
                var ct = xhr.getResponseHeader("content-type") || "";
                //fail server validation
                if (ct.indexOf('html') > -1) {
                    if ($(datos).find(".has-error").length)
                    {
                        modal.modal('show');
                        modal.find(".modal-body").html(datos);

                    }
                }
                //real success
                if (ct === "" || ct.indexOf('json') > -1) {
                    modal.modal('hide');

                }
            },
            error: function (datos) {
                alert(datos.responseText);
            },
            complete: function (datos) {
                console.log(datos);
            }
        });

        return false;
    })