使用ja / jQuery提交表单并保持同一页面

时间:2015-08-19 10:37:39

标签: javascript php jquery ajax

标题是我需要的。我发现了一些问题,但没有帮助。

有我的代码

var confirmSave = confirm('Save;');
if(confirmSave){
    $('.redirected_form').submit( function() {
        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: $(this).serialize(),
            succes: function( data ) {
                        $('#myModal').modal('hide');                         
                    },
            error: function(){
                       alert('Something wrong');
                   }
        });
        return false;
    });

此代码不会保存任何内容

用这个

var confirmSave = confirm('Αποθήκευση ραντεβού;');
if(confirmSave){
    document.getElementById("date_form_submit").click();
    $('.redirected_form').submit( function() {
        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: $(this).serialize(),
            success: function( data ) {
                         $('#myModal').modal('hide');                        
                     },
            error: function(){
                       alert('Something wrong');
                   }
        });
        return false;
    });

已保存数据,但已重定向到PHP页面...

有什么想法吗?

由于

5 个答案:

答案 0 :(得分:0)

$("#button").click(function() {
   var form = document.getElementById("formid");
                    formdata2 = new FormData(form);

                    $.ajax({
                        url : "php file",
                        cache : false,
                        contentType : false,
                        processData : false,
                        data : formdata2,
                        type : "post",
                        success : function(data) {

                        }
                    });
                }
            });

答案 1 :(得分:0)

$('.redirected_form').on('submit', function(e) {
        e.preventDefault();
        $.ajax({
            url     : $(this).attr('action'),
            type    : $(this).attr('method'),
            data    : $(this).serialize(),
            success : function( data ) {
                        $('#myModal').modal('hide');                         
                      },
            error   : function(){
                         alert('Something wrong');
                      }
        });
});

答案 2 :(得分:0)

您需要做的是,在confrim上,触发表单提交。此外,将表单提交为独立块(而不是在确认条件内),如下所示。

var confirmSave = confirm('Αποθήκευση ραντεβού;');

if(confirmSave) {
    $('.redirected_form').submit();
}

$('.redirected_form').submit(function(e) {

    //e.preventDefault();
    $.ajax({
        url     : $(this).attr('action'),
        type    : $(this).attr('method'),
        data    : $(this).serialize(),
        success : function( data ) {
            $('#myModal').modal('hide');                         
        },
        error   : function(){
            alert('Something wrong');
        }
    });
    return false;
});

答案 3 :(得分:0)

问题在于您是一次以两种方式发布数据。

两种解决方案:

  1. 您不必使用表单提交功能。只需在按钮上定义一个单击处理程序(不提交类型)就足够了,它将使用序列化数据执行AJAX调用,而不是重新加载页面。 如果要使用serialize()方法,我建议使用ID属性选择要序列化的表单,并对其执行方法。

  2. 你甚至可以调用事件对象的preventDefault()方法(你的代码中没有这个,但它可以在你的提交事件处理程序中接收),因此表单不会以传统方式发布,所以不会发生重装。

  3. 但是不推荐第二种方式。由于您使用的是AJAX,因此无需提交表单即可。

答案 4 :(得分:0)

嗯,你让我更多地考虑你的答案。 感谢您的帮助,该问题解决了该问题

var confirmSave = confirm('Save;');
                    if(confirmSave)
                    {
                        document.getElementById("date_form_submit").click();
                    }

并使用不同的脚本

jQuery(document).ready(function(){

    jQuery('.redirected_form').submit( function() {

        $.ajax({
            url     : $(this).attr('action'),
            type    : $(this).attr('method'),
            data    : $(this).serialize(),
            success : function( data ) {
                        $('#myModal').modal('hide');                         
                      },
            error   : function(){
                         alert('Something wrong');
                      }
        });

        return false;
    });

});

我对js jQuery很新,我无法解释为什么会这样。

感谢所有人的回答

相关问题