AJAX请求中的Javascript

时间:2011-07-18 09:20:53

标签: javascript ajax load request unobtrusive

我对AJAX功能有点问题:

  1. PAGE A代表页面。
  2. PAGE X代表加载的内容。
  3. RES A代表页面结果。
  4. RES B代表一些加载了AJAX的内容=>新结果。
  5. PAGE A包含20个结果,每个结果都可以删除,并通过AJAX(第X页)加载新结果。

    示例:

    用户在PAGE A上: - > PAGE A加载js“单击”功能。 - >结果是RES A(20x)。

    当用户从RES A(1x)中删除结果时,AJAX会加载一个新结果RES B(1x):

    用户在-Atill-页面A. - > PAGE X加载了js“click”功能。 - >结果是RES B(1x)

    为了向RES B添加点击功能,我必须重新加载一个较轻的JS,但它会使RES A的功能倍增。

    因此,当用户从RES A中删除结果时(删除5个结果的1x5),RES B结果乘以5x(用户获得相同结果的5倍而不是1x)。

    你知道了吗?简而言之,AJAX请求乘以x RES B而不是坚持1个请求。你有什么线索我可以保留我的RES B 1x吗?

    谢谢!

4 个答案:

答案 0 :(得分:2)

我认为你每次重新绑定点击事件“重装轻量级JS”。 Javascript不会替换事件函数 - 它们只是连接在一起。如果您使用jQuery,请使用live添加click事件。如果您不这样做 - 在重新加载之前清除当前的点击事件

答案 1 :(得分:1)

似乎多次附加事件。
使用unbind().click()unbind().bind('click')die().live()您正在使用的

答案 2 :(得分:1)

您的解释真的难以理解,但如果我理解正确您的问题在于您多次绑定相同的元素。

在你的情况下,最好的解决方案是使用jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */}),它允许绑定所有选择器匹配元素一次(在这种情况下,例如,如果你有一个id = datatable的表,每个链接都是在它内部将始终绑定到该处理程序,即使您向表中添加更多html,或删除一些),您也不必在以后担心它。

但是,如果您不使用jQuery,唯一的解决方案是在添加事件之前取消绑定事件(删除已存在的绑定)然后再绑定它们。

答案 3 :(得分:0)

您需要做的是在加载结果时处理结果(1x)。一个简单的方法是在加载时将一个类添加到结果中,并在完成后将其删除。

e.g。

$('.newresult .clickbutton').ready(function(){
   // Do something
});

$('.newresult').removeClass('newresult');