簡體   English   中英

提交后的Ajax調用未在Yii中調用正確的操作/控制器

[英]Ajax call after submit does not call the right action/controller in Yii

在下面的jquery腳本中,我使用3個函數來創建,更新和保存注釋。 創建新記錄時,將調用create函數,如果單擊“保存”,則會保存該記錄。 如果我刷新頁面並想更新記錄,則可以使用。 (先更新然后保存功能)

但是,當我要在創建/保存后立即更新而不刷新頁面時,將調用函數save而不是更新/保存。

我可能需要取消綁定事件,但這對我不起作用。 我的保存是通過單擊觸發的,並且在其中,submit事件鏈接到一個元素。

我在某處讀到它不是一個好習慣,但是我讀到的解決方案是從click函數觸發Submit事件,我嘗試了一下,但是由於我正在使用Ajax,它重新加載了我想避免的頁面。

編輯

我進行了跟蹤,可以看到在創建/保存后要更新時,它調用save方法,但不進入方法內部,也不進入更新方法。 所調用的url包含保存但帶有update調用參數。

/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');
        });

});

如果對事件使用on ,則取消綁定它們的方法是off() 但是,如果只希望事件觸發一次,則最好改用.one()方法。

我假設#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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM