【问题标题】:jquery $.ajax force POSTjquery $.ajax 强制 POST
【发布时间】:2013-06-11 16:39:45
【问题描述】:

我有一个 ajax 函数,它创建一个触发另一个 ajax 函数的链接。出于某种原因,如果我设置了type: "POST",则第二个 ajax 函数拒绝通过 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,但没有成功。

任何指针,非常感谢。

【问题讨论】:

    标签: javascript jquery post get


    【解决方案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));
                            });
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-05
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        相关资源
        最近更新 更多