1

別の ajax 関数をトリガーするリンクを作成する ajax 関数があります。何らかの理由で、設定した場合、2 番目の ajax 関数は POST イベントを通過することを拒否しますtype: "POST"

2 つの機能は次のとおりです。

function HandleActivateLink(source) {
            var url = source.attr('href');
            window.alert(url)
            $.ajax({
                type: "POST",
                url: url,
                success: function (server_response) {
                    window.alert("well done")
                }
            });
            return false;
    }


    function HandleDeleteLink() {
        $('a.delete-link').click(function () {
            var url = $(this).attr('href');
            var the_link = $(this)
            $.ajax({
                type: "POST", // GET or POST
                url: url, // the file to call
                success: function (server_response) {
                    if (server_response.object_deleted) {
                        FlashMessage('#form-success', 'Link Deleted <a class="activate-link" href="' + url.replace('delete', 'activate') + '">Undo</a>');
                        $('a.activate-link').click(function(){
                            HandleActivateLink($(this));
                        });

                        the_link.parent().hide();
                    } else {
                        var form_errors = server_response.errors;
                        alert(form_errors)
                    }
                }
            });
            return false;
        });
    }

HandleDeleteLink成功すると新しいリンクが作成され、作成されたリンクに対して新しいクリック イベントが生成されます。それはすべて機能しますがHandleActivateLink、リクエストを としてサーバーに送信しますGET。代わりに使ってみました$.postが、運が悪かったです。

任意のポインタ、大歓迎です。

4

2 に答える 2

4

2 番目のイベントでは、デフォルトの動作を防ぐようにクライアントに通知しません。

これを行う 1 つの方法は、次のように変更することです。

$('a.activate-link').click(function(){
                            HandleActivateLink($(this));
                        });

に:

$('a.activate-link').click(function(){
                            return HandleActivateLink($(this));
                        });

(これは、HandleActiveLinkすでに false を返しているため機能します。)

これを行うためのより良い方法は、クリック関数にイベント引数を渡して、preventDefault

$('a.activate-link').click(function(e){
                            e.preventDefault();
                            HandleActivateLink($(this));
                        });
于 2013-06-11T16:44:30.817 に答える
0

あなたのURLは何ですか?ところで、JavaScript 経由でクロスドメインの投稿を送信することはできません。

于 2013-06-11T16:51:51.917 に答える