相关文章推荐
咆哮的木瓜  ·  ajaxform ...·  1 周前    · 
威武的菠菜  ·  Jquery 中 ...·  1 周前    · 
有情有义的汤圆  ·  500 Server Error for ...·  1 周前    · 
豪爽的海龟  ·  sqlalchemy ...·  9 月前    · 
千杯不醉的红豆  ·  `Microsoft.ui.xaml.dll ...·  1 年前    · 
卖萌的蚂蚁  ·  ASP.NET ArrayList | 菜鸟教程·  1 年前    · 

Jquery ajax实时结果问题

1 人关注

我有一个结果页面,结果是通过ajax加载的,我有jq ui的价格滑块和复选框,可以实时改变结果。每次变化都会加载结果,但当我开始快速点击复选框和滑块时,每次都会调用结果,而且在某些时候会停止工作。在每次变化后放置一些计时器并不是我所寻找的解决方案。

1 个评论
那么,你正在寻找的解决方案是什么? 一个能让人们疯狂地到处点击的方案? 你应该展示你的代码,并澄清你想要什么。
jquery
ajax
live
Yovo
Yovo
发布于 2011-06-09
2 个回答
KOGI
KOGI
发布于 2017-05-23
已采纳
0 人赞同

你需要使用一个定时器,但不是为每个变化都使用一个,只是一个全局定时器。每次勾选复选框、移动滑块等,设置一个超时,例如500ms,以提交你的ajax请求。但每次有变化时,也要清除现有的定时器,并设置一个新的。

这样一来,只有在500ms的不活动之后才会提交。如果用户高兴地点击,计时器每次都会被清除,只有在他们停止点击后,ajax才会被提交。

myForm.find( 'input, textarea, select' ).bind( 'change', function( )
   var self = $(this);
   self.attr( 'changed', 'changed' ); // -- mark as modified
clearTimeout( $(document).data( 'ajaxTimer' )); // -- prevent previous changes from being submitted
   $(document).data( 'ajaxTimer', setTimeout( submitData, 500 )); // -- start new timer for submission
function submitData( )
   var allInputs = myForm.find( 'input, textarea, select' );
   var changedInputs.filter( '[changed]' );
   allInputs.removeAttr( 'changed' ); // -- mark all as submitted
   changedInputs.each( function( )
      // gather values here
   // build your AJAX request here
Yovo
也许这就是解决方案,但我应该每次都抓取所有的输入来查看变化。这就是我看到的情况。有什么其他方法可以看到变化吗?
KOGI
你不需要每次都抓取所有的输入。只要有一次绑定事件就可以了。当你提交数值时,你可以全部提交,让服务器决定使用哪些数值,或者你可以记录之前的数值,只提交已经改变的数值。更好的是,你可以给每个元素添加一个属性,表明它是否被修改过。请看上面的一个例子...
Tadeck
Tadeck
发布于 2017-05-23
0 人赞同

正如这个答案中所说。 使用jQuery停止AJAX请求 ,你可以将请求分配给一些变量,然后,如果这个变量被设置, 你可以在进行另一个调用之前停止已经等待的请求

这样一来,生效的结果将是最新的结果,应该不会有什么混淆。

我在这里粘贴我参考的答案。

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){}