【问题标题】:Ajax: prevent refreshing page after submitting more than onceAjax:防止多次提交后刷新页面
【发布时间】:2015-09-30 23:38:57
【问题描述】:

我一直使用 jQuery 函数来刷新 div,但是当我多次提交表单时,页面将被刷新。我想停止刷新并显示新内容,例如 facebook cmets 更新。请帮我解决这个问题。

这是我的代码:

<div class="row">
   <div id="right-side" class="col-lg-9 col-md-9 col-sm-8 col-xs-12">
        <div id="profile_container">
            <div class="profile_items">
                <ul class="profile_ul">
                    <li id="personal-info">
                        <div class="profile_content">
                            <form action="" method="POST" id="personal-info-form" class="form-group">
                                <table>
                                <?php   foreach ($personal as $pdata) { ?>
                                <tr id="new_personal" class="pro-info-set">
                                    <td class="info-group-left">
                                        <p class="pro-info-left"><?php echo $pdata['js_personal_title']; ?></p>
                                    </td>
                                    <td class="info-group">
                                        <p class="pro-info-right"><?php echo $pdata['js_personal_desc']; ?></p>
                                    </td>
                                </tr>
                                <?php   } ?>
                                <tr class="pro-info-set">
                                    <td class="info-group-left">
                                        <input class="form-control" type="text" id="js_personal_title" name="js_personal_title">
                                    </td>
                                    <td class="info-group form-inline">
                                        <input class="form-control" type="text" id="js_personal_desc" name="js_personal_desc">
                                        <input id="submit_person" class="form-control" type="submit" value="Add">
                                        <label id="submit_person_msg" value="Add"></label>
                                    </td>                                       
                                </tr>
                                </table>
                            </form>
                            <script>
                                $(document).ready(function(){
                                    $("#submit_person").click(function(e){
                                        e.preventDefault();
                                        js_personal_title = $("#js_personal_title").val();
                                        js_personal_desc= $("#js_personal_desc").val();
                                        var datastr = 'js_personal_title='+js_personal_title + '&js_personal_desc='+js_personal_desc; 
                                        $.ajax({
                                            type: "POST",
                                            url: "<?php echo base_url().'index.php/Jobseeker/add_personal' ?>",
                                            data: datastr,
                                            success:function() {
                                                $("#personal-info-form")[0].reset();
                                                $(".row").load(location.href  + "#new_personal");
                                                $( "#submit_person_msg" ).append( "<p> Loading... </p>" );
                                            }
                                        });
                                    return false;
                                    });
                                });
                            </script> 
                        </div>                            
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

  • 为什么不在用户单击按钮后禁用它并在完全执行ajax后重新启用它

标签: javascript php jquery html ajax


【解决方案1】:

试试这个:

$("#submit_person").click(function(e){
    e.preventDefault();
    $(this).prop('disabled', true); //<---disabled it here
    var data = { // instead you can send an object too
        js_personal_title : $("#js_personal_title").val(),
        js_personal_desc  : $("#js_personal_desc").val()
    }
    $.ajax({
        type: "POST",
        url: "<?php echo base_url().'index.php/Jobseeker/add_personal' ?>",
        data: data,
        success:function() {
            $("#personal-info-form")[0].reset();
            $(".row").load(location.href  + " #new_personal", function(){
                $("#submit_person").prop('disabled', false); // now enable it here.
            });
            $( "#submit_person_msg" ).append( "<p> Loading... </p>" );
        },
        error: function(){ 
            $("#submit_person").prop('disabled', false); // now enable it here. 
        }
    });
});

在我看来问题是用户能够发送多个请求,因此您可以在单击时disable 按钮并在将数据附加到 DOM 时启用它。


更新:

您可以使用.load(url, cb)函数的回调函数来启用被禁用的按钮,这样可以确保内容加载完毕,您可以再次点击提交按钮。

$(".row").load(location.href  + " #new_personal", function(){
     $("#submit_person").prop('disabled', false); // now enable it here.
});

另一个建议是为每个元素设置唯一的 id 或将其更改为类名。我可以看到您正在复制 php 循环中的 id:

   <?php   foreach ($personal as $pdata) { ?>
    <!-- <tr id="new_personal" class="pro-info-set"> -->
    <tr class="pro-info-set new_personal">
        <td class="info-group-left">
            <p class="pro-info-left"><?php echo $pdata['js_personal_title']; ?></p>
        </td>
        <td class="info-group">
            <p class="pro-info-right"><?php echo $pdata['js_personal_desc']; ?></p>
        </td>
    </tr>
    <?php   } ?>

【讨论】:

  • 在第三次尝试页面将被重新加载
  • @SahanPerera 届时您的请求可能会完成。
  • 那我能做些什么呢?
  • 你的意思是我必须在功能成功后隐藏按钮?
  • @SahanPerera 好的,我想我明白了你的意思,相反你可以在负载发生后启用它。你可以在那里传递一个回调函数。
【解决方案2】:

你应该听submit 形式的事件而不是click

$("#personal-info-form").on('submit', function(e){
e.preventDefault();
js_personal_title = $("#js_personal_title").val();
js_personal_desc= $("#js_personal_desc").val();
var datastr = 'js_personal_title='+js_personal_title + '&js_personal_desc='+js_personal_desc; 
$.ajax({
   type: "POST",
   url: "<?php echo base_url().'index.php/Jobseeker/add_personal' ?>",
   data: datastr,
   success:function() {
     $("#personal-info-form")[0].reset();
     $(".row").load(location.href  + "#new_personal");
     $( "#submit_person_msg" ).append( "<p> Loading... </p>" );
   }
 });
  return false;
})

【讨论】:

  • 在第三次尝试页面将被重新加载
【解决方案3】:

我在这里找到了答案 Jquery: Click event doesn't work after append. (Don't know how to use .ON)

$(document).on('click', '.choimg', function(e) {

});

【讨论】:

    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2020-06-29
    • 2016-01-18
    • 2017-03-14
    • 2015-05-22
    • 2018-01-24
    相关资源
    最近更新 更多