相关文章推荐
帅气的火腿肠  ·  python ...·  1 年前    · 
面冷心慈的大象  ·  Oracle ...·  1 年前    · 
另类的砖头  ·  Regex.Split 方法 ...·  1 年前    · 
无邪的灌汤包  ·  spring boot持久化 ...·  1 年前    · 

jQuery Ajax请求执行得太频繁

0 人关注

我通过现场操作员将一个点击函数绑定到一个li元素上。

$(".UListView li input.iconbutton.click").live("click", function(e){
e.preventDefault();
[...]
$.get("ajax/categorylist.php?appendcategories=true&parentcat="+currentid+"&side="+side, function(data){
[...]

在近90%的情况下,它被执行一次,一切都很好。但有时ajax请求被执行2次甚至更多次。

这是firebug的输出。(执行了2次)

jquery.min.js (Zeile 4)
GET htt-p://localhost/request.php?....    200 OK     11ms   
jquery.min.js (Zeile 4)
GET htt-p://localhost/request.php?....    200 OK      19ms

这完全破坏了我的布局,因为所有的元素在最坏的情况下被添加到DOM的6倍。

有没有人知道这种行为的原因是什么?或者有什么好办法可以解决 "添加到DOM "代码被多次执行的问题。

2 个评论
我注意到IE有时会这样做,这可能与你的事件被注册了两次有关,或者你有一些jquery文件被加载了两次--比如unobtrusive。从控制台,看一下被挂起的事件,像这样。 $("#myItem").data('events')
该死的,我没有看到这个规律。关闭色块后,点击事件没有被破坏。我不知道为什么有时甚至在第一次打开色块时也会发生这种情况,但把你的所有意见放在一起就解决了谢谢你
jquery
ajax
live
simonheinrich
simonheinrich
发布于 2012-07-13
2 个回答
已采纳
0 人赞同

在你的代码中加入 e.stopPropagation(); ,并在点击事件结束前 return false;

谢谢你,现在效果好多了,但还没有完全解决这个问题。我忘记说了。这个问题只出现在ajax请求是在一个颜色框内提交的时候。当它被执行两次时,所有在色块内的后续请求也被执行两次,直到我关闭色块并刷新页面。
能否请你提供一个jsfiddler?
Rajesh
Rajesh
发布于 2012-07-13
0 人赞同

我希望你没有把现场事件绑定两次,如果是这样的话,就用这个。

 $(".UListView li input.iconbutton.click").die("click");
   $(".UListView li input.iconbutton.click").live("click", function(e){

或者有时即使我们点击了一个按钮,事件也会被触发两次。

在这种情况下,点击按钮后,先隐藏按钮,以防止多次提交。

$(".UListView li input.iconbutton.click").live("click", function(e){
$(".UListView li input.iconbutton.click").hide();