jQuery提交刷新页面

时间:2011-02-24 01:45:50

标签: javascript jquery html ajax http-post

以下代码旨在执行纯粹的ajax POST请求,而不是它似乎通过ajax执行POST,然后浏览器导航到响应。

HTML ...

<div id="bin">
    <form class="add" method="post" action="/bin/add/">
        <p>I'm interested! Save for later.</p>
        <input type="hidden" name="product_id" value="23423">
        <input type="submit" value="Save">
    </form> 
    <form style="display:none;" class="remove" method="post" action="/bin/remove/">
        <p>I changed my mind--I'm not interested.</p>
        <input type="hidden" name="product_id" value="23423">
        <input type="submit" value="Unsave">
    </form>
</div>

jQuery ......

$('#bin form').submit(function() {
                $.post($(this).attr('action'),{
                    success: function(data) { $(this).hide().siblings('form').show() },
                    data: $(this).serialize()

                });
                return false;
            })

据我了解,return false;行应该表示无论如何,对提交功能的任何调用或点击“提交”按钮或点击输入意味着我的功能将执行,浏览器将导航至/bin/add/bin/remove。但由于某种原因,浏览器正在更改页面。

知道我在这里做错了吗?感谢。

4 个答案:

答案 0 :(得分:4)

可能是您的JavaScript失败,因此正在执行默认行为。

尝试在像Firebug这样的工具中检查XHR。

此外,您可以尝试event.preventDefault()(事件回调的第一个参数为event)。

答案 1 :(得分:3)

我的赌注是因为$(this),试试这种方式......

$('#bin form').submit(function() {
    var $this = $(this);
    $.post($this.attr('action'), {
        success: function(data) {
            $this.hide().siblings('form').show()
        },
        data: $this.serialize()

    });
    return false;
});

demo 无错误

demo ,错误

答案 2 :(得分:1)

使用event.preventDefault()来阻止事件的默认操作。一个好处是你可以在Ajax请求之前放置它,这样如果它失败了,你仍然会阻止表单提交。

您的代码失败,因为成功回调中this的值是全局window对象。你试图隐藏它失败了。您可能希望this引用表单,如下所示:

$('#bin form').submit(function(ev) {
    var _this = this;
    ev.preventDefault();
    $.post($(this).attr('action'), {
        success: function() {     
           $(_this).hide().siblings('form').show();
        },
        data: $(this).serialize()
    });
})

查看working example

答案 3 :(得分:0)

$(...).submit(...)里面有$(document).ready(function(){ code here });吗?

应该是:

$(document).ready(function() {
    $('#bin form').submit(function() {
            $.post($(this).attr('action'), {
                success: function(data) { $(this).hide().siblings('form').show(); },
                data: $(this).serialize()
            });
            return false;
        });
});