我可以在正在进行的Ajax请求中发出Ajax请求(例如,在成功回调函数上)吗?

时间:2010-09-06 12:20:48

标签: ajax jquery

我有一个jQuery应用程序,一个购物车,如果文本输入字段被更改,它会将信息发回服务器。这是在Ajax请求中完成的。现在,如果Ajaxrequest成功,我想异步重新加载shoppingcart。代码如下:

$(document).ready(function() {

    var jInput = $(":input");
    jInput.change(function() {
        var vareAntal = $(this).val();
        var vareID = $(this).siblings("input#vareID").val();
        $.ajax({
            type: 'POST',
            url: 'checkout.aspx',
            data: { 'ID': vareID, 'Antal': vareAntal },
            success: function() {
                $("#newbasket").load(location.href + " #newbasket>*", "");
            }
        });
    });
});

这有效,但只有一次!如果我更改了文本输入字段,则在第一次加载页面后,ID为newbasket的div将异步重新加载。但是,如果我再次尝试改变它,没有任何反应。

我尝试使用Firebug进行一些调试,第一次更改文本输入字段时,它会触发POST事件,然后发生GET事件,此时POST事件成功。但在那之后,当我再次更改文本输入字段时没有任何反应。

那么,如何在每次文本输入更改后实现触发.load()方法?

我也尝试过使用.ajaxComplete()函数,但是当然,这导致了无限循环,因为.load()是一个ajax对象。

1 个答案:

答案 0 :(得分:1)

而不是.change(func),请在此处使用.live('change', func),如下所示:

jInput.live('change', function() {

这将使选择器也适用于添加的任何 new 输入。当您替换当前的元素时,它们的事件处理程序会丢失(或者更确切地说,不会重新创建,因为您有新元素)。 .live()仅用于此目的,它会侦听来自旧新元素的事件,无论它们何时被添加。