如何在Ajax调用后提交表单

时间:2015-01-20 08:44:51

标签: javascript jquery ajax forms

我有一个像这样的表格

<form id="formCategorias" action="./index.php" method="post">
<input type="hidden" value="5" name="pais">
<table>
    <tbody>
        <tr class="row">
            <td>Renta Comerciales</td>
            <td>
                <input type="text" class="validate" value="" id="inputcat_0" name="" style="border: 1px solid rgb(221, 221, 221);">
                <select id="categoria_0" name="categoria_0">
                    <option value="0">Provincias</option>
                    <option value="Oficinas">Oficinas (11)</option>
                    <option value="Ranchos">Ranchos (12)</option>
                    <option value="Naves Industriales">Naves Industriales (15)</option>
                </select>
                <button onclick="seleccionarCategoria(0)" type="button">+</button>
            </td>
        </tr>
        <tr>
            <td align="right" colspan="2">
                <input type="submit" id="categorias" value="Enviar" name="submit">
            </td>
        </tr>
    </tbody>
</table>

我正在使用以下脚本处理它

$(document).on('submit', '#formCategorias', function (event) {
    $(".validate", this).css("border", "1px solid #ddd");
    event.preventDefault();

    var valid = true;
    $.each($(".validate", this), function () {
        if ($(this).val().length == 0) {
            $(this).css("border", "1px solid red");
            valid = false;
        }
    });
    var formTosubmit = $(this).attr('id');


    var jsonCategoria = JSON.stringify(categoria),
        jsonFeed = JSON.stringify(feed),
        url = "xxxxxxxxxx/feeds/web/ajax.php";
    if (jsonCategoria != '' && jsonFeed != '') {
        var posting = $.post(url, {
            im_core: 'updateCategorias',
            Categorias: jsonCategoria,
            xmlFeeed: jsonFeed,
            idFeed: 11
        }).done(function (data) {
            if (data == 1) {
                valid = true;
            } else alert("Check the form");
        });
    }
    if (valid == true) alert('#' + formTosubmit);
    $('#' + formTosubmit).submit();
});

问题是在我使用submit()函数提交表单后调用ajax后,浏览器反复执行Ajax调用(),导致错误,

修复可能是submit()函数应该在action标记中提供的url上提交表单而不是给ajax调用提供的url,

任何人都可以建议我

先谢谢

3 个答案:

答案 0 :(得分:0)

这里有两个问题

  1. 由于您正在调用jQuery提交事件,它将再次触发提交处理程序,从而创建无限递归调用。要修复此调用,请使用表单元素(dom对象)的提交方法
  2. 由于ajax是异步检查post回调本身的有效条件
  3. 所以

    $(document).on('submit', '#formCategorias', function (event) {
        $(".validate", this).css("border", "1px solid #ddd");
        event.preventDefault();
    
        var valid = true;
        $.each($(".validate", this), function () {
            if ($(this).val().length == 0) {
                $(this).css("border", "1px solid red");
                valid = false;
            }
        });
    
        var frm = this;
        var formTosubmit = $(this).attr('id');
    
    
        var jsonCategoria = JSON.stringify(categoria),
            jsonFeed = JSON.stringify(feed),
            url = "xxxxxxxxxx/feeds/web/ajax.php";
        if (jsonCategoria != '' && jsonFeed != '') {
            var posting = $.post(url, {
                im_core: 'updateCategorias',
                Categorias: jsonCategoria,
                xmlFeeed: jsonFeed,
                idFeed: 11
            }).done(function (data) {
                if (data == 1) {
                    valid = true;
                    alert('#' + frm.id);
                    frm.submit()
                } else {
                    alert("Check the form");
                }
            });
        }
    });
    

答案 1 :(得分:0)

我的方法将在

之下
  1. 编写ajax调用

    $request = $ajax ( ... )

    不要在ajax中写 .done success:参数

  2. 从ajax URL发送回调值,该值具有true或false值

    $request.done(function(resp) {
      if ( resp.parameter === true )
        $('#formID').submit();
    });
    
    $request.fail( function () {
        alert('ajax fails');
     });
    

  3. 替代方法:在 jquery 1.5

    中添加的$.ajax中使用 dataFilter: 参数

    演示代码:

    $response = $.ajax( {
        .....
        dataType: 'JSON',
        dataFilter: function(result, type) {
                // console.group('DataFilter');
                // console.log(result);
                // console.log(type);
                // console.groupEnd();
                if (type === 'JSON') {
                    var parsed_data = $.parseJSON(result);
                    // console.info('Parsed Data');
                    // console.log(parsed_data);   
                    // code to pre-filtering function to sanitize the response.
                    $finalThing = JSON.stringify({ everyThing : true });
                    return $finalThing;
                } // end of if
            } // end of DataFilter
    }); // end of $.ajax
    
    $response.done (function(resp) {
        // here now `resp` will have $finalThing which comes from dataFilter
        if( resp.everyThing == true ) { $('#formId').submit(); }
    });
    

    dataFilter Reference

      

    这是一个用于清理响应的预过滤功能。你应该   返回已清理的数据。该函数接受两个参数:raw   从服务器返回的数据和'dataType'参数。

答案 2 :(得分:0)

在你的被叫php中,你是否只是尝试了一个回声?