提交表单的jquery触发器导致无限循环

时间:2014-03-06 15:25:19

标签: jquery asp.net-mvc-5

当启动我的插件时,它运行一个触发器,用于从mvc c#controller加载数据一次,但页面刷新无限(循环)。当我按下提交按钮运行正常。

问题在于:

    if (opcoes) {
        $.extend(defaults, opcoes);
                $('#formPaginacao').trigger('submit');
            }

其余代码(按下提交按钮时有效):

    return this.each(function () {

        function postProcessing(data) {
            dados = data;
            p.totalRegistros = dados.length;
            defaults.totalPaginas = Math.ceil(p.totalRegistros / defaults.registrosPorPagina);
            defaults.registroAtual = 0;
            renderiza();
        }
        $('#formPaginacao').submit(function (e) {
            e.preventDefault();
            dados = null;
            getValues();
            e.stopPropagation();
        });

        function getValues() {
            var dadosPesquisaForm = $('#formPaginacao').serialize();
            var dadosPesquisaJson = JSON.stringify(dadosPesquisaForm);
            var dadosEnvio = JSON.parse(dadosPesquisaJson);
            $.ajax({
                type: 'POST',
                url: defaults.controleCarregaDados,
                data: dadosEnvio,
                dataType: 'json',
                cache: false,
                success: function (data) { postProcessing(data); },
                async: true,
                error: function (erro) {
                    alert('erro ajax=' + erro)
                }
            });
        };

{...}

1 个答案:

答案 0 :(得分:1)

你有太多内置于此。将提交按钮更改为按钮

<input type="button" id="formPaginacao" value="Submit" />

然后你只需要

$('#formPaginacao').on('click', function (e) {
    $.ajax({
        type: 'POST',
        url: defaults.controleCarregaDados,
        data: $('#formPaginacao').serialize(),
        dataType: 'json',
        cache: false,
        success: function (data) { postProcessing(data); },
        async: true,
        error: function (erro) {
            alert('erro ajax=' + erro)
        }
    });
});

这也不应该在每个声明中。把它放进去

$(document).ready(function(){
    //button click here
});

form.serialize会将表单中的所有值传递回控制器。控制器上的输入应与您在视图中定义的模型相同

[HttpPost]
public ActionResult formPaginacao(ModelType model){
    //do something with the data
    //return json back tot he view
}