jQuery ajax只能第一次使用

时间:2010-06-15 14:41:03

标签: jquery

我有一个数据表,在按钮单击时,某些值将保存到数据库,而其他值则被检索。我需要这个过程是连续的,但我只能让它第一次工作。

起初我使用.ajax().replaceWith()来重写整个表,但因为这会覆盖DOM,所以它会丢失与表关联的事件。我无法使用.live(),因为我正在使用stopPropagation().live()由于事件冒泡而不支持它。我能够基本上将click事件重新绑定到.ajax()回调中的表上,但第二次调用按钮点击事件没有做任何事情。

我将代码更改为使用.get()用于ajax,.html()将结果放在表中(服务器端代码现在返回完整的表,而不是<table>标记) 。我不再需要将click事件重新绑定到表中,但后续单击该按钮仍然无效。

最后,我将其更改为.load(),但结果相同(非)。

通过“什么都不做”我的意思是当ajax调用按预期返回新的HTML时,它不会应用于表。我确定它与更改DOM有关,但我想我只是覆盖了表内容而不是表对象本身,它应该可以工作。显然我错过了一些东西;它是什么?

修改

HTML:

<table id="table1" class="mytable">
    <tr>
        <td><span id="item1" class="myitem"></span></td>
        <td><span id="item2" class="myitem"></span></td>
    </tr>
</table>

<input id="Button1" type="button" value="Submit" />

jQuery的:

$( "Button1" ).click( function() {
    $( "table1" ).load(
        "data.aspx",
        function( data ) {
            //...
        }
    );
} );

4 个答案:

答案 0 :(得分:3)

使用.replaceWith方法只是第一次工作,但使用.html方法一直都很好。 JQuery的:

$.ajax ({
        type: "GET",            
        url: '/MyUrl/Id',
        data: "{}",
        cache: false,
        dataType: "html",
        success: function(data) {
          $('#divContainer').html(data);
        }
})

答案 1 :(得分:2)

我盯着这看了两天半,这让我确信我在用jQuery做错了,但是通过反复试验和大量警报声明,我终于发现ajax每次都返回相同的结果。将服务器端脚本设置为不缓存(Response.Expires = 0)解决了问题。

(而且,FWIW,我还在使用.load()语句。)

答案 2 :(得分:1)

您需要在加载新内容后重新绑定事件处理程序。

答案 3 :(得分:1)

如果您使用1.4.2 .delegate()可能有用吗?

http://api.jquery.com/delegate/