AJAX 请求中的 Javascript

发布于 2024-11-25 05:03:34 字数 629 浏览 3 评论 0原文

我对 AJAX 功能有一个小问题:

  1. PAGE A 代表页面。
  2. PAGE X 代表加载的内容。
  3. RES A 代表页面结果。
  4. RES B 代表一些AJAX加载的内容 =>新的结果。

页面 A 包含 20 个结果,每个结果都可以删除,并通过 AJAX (页面 X) 加载新结果。

示例:

用户位于页面 A: --> A页加载js“点击”功能。 -->结果为 RES A (20x)。

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

用户仍然在页面 A 上。 --> PAGE X加载了js“点击”功能。 -->结果是 RES B (1x)

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

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

你明白了吗?简而言之,AJAX 请求乘以 x RES B,而不是坚持 1 个请求。您知道如何保留我的 RES B 1x 吗?

谢谢!

I have a little problem with an AJAX function:

  1. PAGE A stands for the page.
  2. PAGE X stands for the loaded content.
  3. RES A stands for the page results.
  4. RES B stands for some AJAX loaded content => new results.

PAGE A contains 20 results, each result can be removed and a new result is loaded via AJAX (PAGE X).

Example:

User is on PAGE A:
--> PAGE A loads js "click" functions.
--> Results are RES A (20x).

When the user removes a result from RES A (1x), AJAX loads a new result RES B (1x):

User is -still- on PAGE A.
--> PAGE X is loaded with js "click" functions.
--> Result is RES B (1x)

In order to add click functions to RES B, I have to reload a lighter JS but it multiplies the functions of RES A.

So when the user removes results from RES A (1x5 for 5 results removed), RES B result is multiplied 5x (the user gets 5x the same result instead of 1x).

Do you get it? In brief, the AJAX request is multiplied by x RES B instead of sticking to 1 request. Do you have any clue how I can keep my RES B 1x?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

°如果伤别离去 2024-12-02 05:03:34

我认为你每次“重新加载更轻的JS”时都会重新绑定点击事件。 JavaScript 不会取代事件函数——它们只是连接在一起。如果您使用 jQuery,请使用 live 添加点击事件。如果您不这样做 - 在重新加载之前清除当前的点击事件

I think you re-binding click event every time while "reload a lighter JS". Javascript doesn't replace the event function - they are just concatenated. If you use jQuery use live to add click event. If you don't - clear current click events before reloading

农村范ル 2024-12-02 05:03:34

似乎事件被附加多次。
使用 unbind().click()unbind().bind('click')die().live() 等等你在使用吗

Seems that events are being attached multiple times.
Use unbind().click() or unbind().bind('click'), or die().live() whatever are you using

征棹 2024-12-02 05:03:34

您的解释确实很难理解,但如果我理解正确的话,您的问题在于您多次绑定同一元素。

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

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

Your explanation is really difficult to understand, but if I understood correctly your problem lies in the fact that you bind the same element multiple times.

The best solution in your case would be the use of jQuery .delegate('#datatable a', 'click', function(e){ /* DO STUFF */}) which allows to bind all the selector matching elements once (in this case for example if you had a table with id=datatable, every link that is inside of it will always be bound to that handler, even if you add more html to the table, or remove some) and you wouldn't have to worry about it later on.

However, if you don't use jQuery the only solution is to either unbind the events before you add them (to remove the already existing binds) and then bind them again.

垂暮老矣 2024-12-02 05:03:34

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

例如

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

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

What you need to do is process the result (1x) when you load it. A simple way can be to have a class added to the results when u load and removing it once u r done.

e.g.

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

$('.newresult').removeClass('newresult');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文