1

我有一个 ajax 函数,它创建一个触发另一个 ajax 函数的链接。出于某种原因,如果我设置了第二个 ajax 函数拒绝通过 POST 事件type: "POST"

两个函数如下:

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

在第二种情况下,您没有通知客户端阻止默认行为。

一种方法是改变:

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

到:

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

(这是有效的,因为HandleActiveLink已经返回 false。)

一个更好的方法是将事件参数传递给 click 函数并告诉它preventDefault

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

你的网址是什么?顺便说一句,您不能通过 javascript 发送跨域帖子。

于 2013-06-11T16:51:51.917 回答