草庐IT

javascript - 我的 ajax 请求提交一次,然后提交两次,然后提交 4 次并不断加倍

coder 2024-07-28 原文

我在底部有带有下一个和上一个按钮的选项卡,当我第一次加载页面时,ajax 将数据加载到第一个选项卡中,当我单击下一个时,该表单将正常提交,但是如果我在按下一个之后按上一个,它将拉另一个 ajax 以与我在加载时相同的方式填充第一次潜水,但是当我单击下一步提交表单时,ajax 请求加倍并提交两次,然后 4 次 8 等,我怎样才能阻止它 happeing.. .. 我的一个页面上的 jquery 在所有页面上都是相同的:

$(document).on("click",".previous", function()
{
    $.ajax({
        url: '<?php echo Config::get('URL'); ?>wizzard/personal_information',
        type: 'GET',
        success: function(data){
            $('#tab2').html('');
            $('#tab2').removeClass('active');
            $('.tab_2').removeClass('active');
            $('#tab1').html(data);
            $('#tab1').addClass('active');
            $('.tab_1').addClass('active');
        }
    });
});

$(document).on("click",".next", function()
{
    $('#update_contact_information').on("submit", function()
    {

        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            dataType: 'json',
            data: $(this).serialize(),
            success: function(data){
                if(!data.success){
                    $.notify(data.error,{
                        className:'error',
                        clickToHide: true,
                        autoHide: true,
                        globalPosition: 'bottom right'
                    });

                    $.ajax({
                        url: '<?php echo Config::get('URL'); ?>wizzard/employment_history',
                        type: 'GET',
                        success: function(data){
                            $('#tab2').removeClass('active');
                            $('.tab_2').removeClass('active');
                            $('#tab2').html('');
                            $('#tab3').html(data);
                            $('#tab3').addClass('active');
                            $('.tab_3').addClass('active');
                        }
                    });
                }else{
                    $.notify(data.success,{
                        className:'success',
                        clickToHide: true,
                        autoHide: true,
                        globalPosition: 'bottom right'
                    });
                    $.ajax({
                        url: '<?php echo Config::get('URL'); ?>wizzard/employment_history',
                        type: 'GET',
                        success: function(data){
                            $('#tab2').html('');
                            $('#tab2').removeClass('active');
                            $('.tab_2').removeClass('active');
                            $('#tab3').html(data);
                            $('#tab3').addClass('active');
                            $('.tab_3').addClass('active');
                        }
                    });
                }
            }
        });
        return false;
    });

    $('#update_contact_information').trigger('submit');
});

我的标签:

    <div class="panel-body">
        <div id="rootwizard">
                <div class="navbar">
                  <div class="navbar-inner">
                    <div class="container">
                <ul class="nav nav-pills">
                    <li class="active tab_1"><a href="#tab1" data-toggle="tab"><?php echo System::translate("Personal information"); ?></a></li>
                    <li class="tab_2"><a href="#tab2" data-toggle="tab"><?php echo System::translate("Contact information"); ?></a></li>
                    <li class="tab_3"><a href="#tab3" data-toggle="tab"><?php echo System::translate("Employment history"); ?></a></li>
                    <li class="tab_4"><a href="#tab4" data-toggle="tab"><?php echo System::translate("Qualification history"); ?></a></li>
                    <li class="tab_5"><a href="#tab5" data-toggle="tab"><?php echo System::translate("Avatar"); ?></a></li>
                </ul>
                 </div>
                  </div>
                </div>
                <div class="tab-content">
                    <div class="tab-pane active" id="tab1">

                    </div>
                    <div class="tab-pane" id="tab2">

                    </div>
                    <div class="tab-pane" id="tab3">

                    </div>
                    <div class="tab-pane" id="tab4">

                    </div>
                    <div class="tab-pane" id="tab5">

                    </div>
                    <ul class="pager wizard">
                        <li class="previous"><a href="javascript:;"><?php echo System::translate("Previous"); ?></a></li>
                        <li class="next"><a href="javascript:;"><?php echo System::translate("Next"); ?></a></li>
                    </ul>
                </div>  
            </div>

和初始调用:

<script>
$(function(){

    $.ajax({
        url: '<?php echo Config::get('URL'); ?>wizzard/personal_information',
        type: 'GET',
        success: function(data){
            $('#tab1').html(data);
        }
    });
});
</script>

最佳答案

每次单击按钮时,您都会将一个新的提交事件绑定(bind)到表单,这就是它加倍的原因。从 clickk 处理程序中删除绑定(bind)

$(document).on("click",".next", function()
{

    $('#update_contact_information').trigger('submit');
});

$(document).on("submit", '#update_contact_information', function()
{

    $.ajax({
        url: $(this).attr('action'),
        type: $(this).attr('method'),
        dataType: 'json',
        data: $(this).serialize(),
        success: function(data){
            if(!data.success){
                $.notify(data.error,{
                    className:'error',
                    clickToHide: true,
                    autoHide: true,
                    globalPosition: 'bottom right'
                });

                $.ajax({
                    url: '<?php echo Config::get('URL'); ?>wizzard/employment_history',
                    type: 'GET',
                    success: function(data){
                        $('#tab2').removeClass('active');
                        $('.tab_2').removeClass('active');
                        $('#tab2').html('');
                        $('#tab3').html(data);
                        $('#tab3').addClass('active');
                        $('.tab_3').addClass('active');
                    }
                });
            }else{
                $.notify(data.success,{
                    className:'success',
                    clickToHide: true,
                    autoHide: true,
                    globalPosition: 'bottom right'
                });
                $.ajax({
                    url: '<?php echo Config::get('URL'); ?>wizzard/employment_history',
                    type: 'GET',
                    success: function(data){
                        $('#tab2').html('');
                        $('#tab2').removeClass('active');
                        $('.tab_2').removeClass('active');
                        $('#tab3').html(data);
                        $('#tab3').addClass('active');
                        $('.tab_3').addClass('active');
                    }
                });
            }
        }
    });
    return false;
});

关于javascript - 我的 ajax 请求提交一次,然后提交两次,然后提交 4 次并不断加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729883/

有关javascript - 我的 ajax 请求提交一次,然后提交两次,然后提交 4 次并不断加倍的更多相关文章

  1. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  4. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  5. ruby - 按值降序排列散列,然后按升序键入 ruby - 2

    我有这样的哈希trial_hash={"key1"=>1000,"key2"=>34,"key3"=>500,"key4"=>500,"key5"=>500,"key6"=>500}我按值降序排列:my_hash=trial_hash.sort_by{|k,v|v}.reverse我现在是这样理解的:[["key1",1000],["key4",500],["key5",500],["key6",500],["key3",500],["key2",34]]但我希望当值相同时按键的升序排序。我该怎么做?例如:上面的散列将以这种方式排序:[["key1",1000],["key3",500

  6. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  7. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  10. ruby-on-rails - 测试我的 Ruby gem:Shoulda::Matchers:Module (NoMethodError) 的未定义方法 `configure' - 2

    我正在开发我的第一个Rubygem,并捆绑了cucumber、rspec和shoulda-matches进行测试。当我运行rspec时,出现以下错误:/app/my_gem/spec/spec_helper.rb:6:in`':undefinedmethod`configure'forShoulda::Matchers:Module(NoMethodError)这是我的gem规范:#my_gem.gemspec...Gem::Specification.newdo|spec|......spec.add_development_dependency"activemodel"spec.a

随机推荐