【问题标题】:Ajax call after submit does not call the right action/controller in Yii提交后的 Ajax 调用不会在 Yii 中调用正确的动作/控制器
【发布时间】:2014-05-18 19:13:08
【问题描述】:

在下面的 jquery 脚本中,我使用了 3 个函数,创建、更新和保存 厘米。当我创建一条新记录时,会调用 create 函数,如果我单击保存,则该记录 被保存。如果我刷新页面并想要更新记录,它可以工作。 (更新然后保存功能)

但是当我想在创建/保存之后更新而不刷新页面时, 调用函数 save 而不是 update/save。

我可能需要取消绑定事件,但这对我不起作用。 我的保存是通过单击触发的,在其中,提交事件链接到一个元素。

我在某处读到这不是一个好习惯,但我读到的解决方案是触发提交 来自点击功能的事件,我试过了,但它重新加载了我想避免的页面,因为我正在使用 阿贾克斯。

编辑

我放了一个跟踪,我可以看到当我想在创建/保存之后更新时,它调用了 save 方法但没有进入方法内部,也没有进入更新方法。调用的 url 包含保存但带有更新调用参数。

/blog/index.php/save...

我的理解是,在 MVC 模式中,控制器方法渲染视图。 由于创建/保存后呈现的最后一个视图是由保存操作控制器完成的,因此在此之后完成的提交调用了从中呈现视图的控制器。

任何见解将不胜感激。

$(document).ready(function() {

    $("input.switch-input:radio").click(function(e) {

            var comment = $(this).data('comment');
            var val = $(this).data('val');

            if (comment.length == 0){   // New record
                $.ajax( 
                {
                    --> call url to create new record 
                });
            }
            else if(comment !== val){
                if (confirm ("change comment?")){

                    $.ajax( 
                    {
                    --> call url to update record
                    });
                } else{
                    alert('no');
                }
            } 
    })
;

   $('body').on('click','#saveComment',function(e) {
        e.preventDefault();
        var url = $(this).val();
            $("#comment-form").submit(function(e) {
                var postData = $(this).serialize();
                $.ajax( 
                {
                    --> call url to save data
                });
                e.preventDefault(); //STOP default action
                });
            $("#comment-form").submit();
            $("#comment-form").unbind('submit');
            $("#saveComment").unbind('click');
        });

});

【问题讨论】:

  • 我做了,但它不起作用。 @Scimonster,我用新信息更新了我的帖子

标签: php jquery yii


【解决方案1】:

如果您将on 用于您的事件,那么取消绑定它们的方法是off()。但是,如果您只想触发一次事件,则最好改用.one() 方法。

【讨论】:

    【解决方案2】:

    我假设#saveComment 是#comment-form 中的提交按钮。既然如此,为什么不首先通过简单地监听提交事件来省去跟踪点击、阻止提交、手动触发提交等的麻烦呢?

    $('body').on('submit','#comment-form',function(e) {
        e.preventDefault();
        // Code to execute after the form was submitted and submission has been prevented
    }
    

    话虽如此,如果你想分离它,你可以在那里做,但你不能为此使用匿名函数,你必须命名它。

    var submitHandler = function(e) {
        e.preventDefault();
        // Code to execute after the form was submitted and submission has been prevented
        alert("hello");
    
        // Detach event listener when suitable
        $("body").off('submit','#comment-form', submitHandler)
    }
    
    $('body').on('submit','#comment-form', submitHandler);
    

    这里的工作示例:http://jsfiddle.net/K3ePW/2/

    【讨论】:

    • 抱歉,用“点击”而不是“提交”添加了错误的版本。现已更正
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多