我有一个结果页面,结果是通过ajax加载的,我有jq ui的价格滑块和复选框,可以实时改变结果。每次变化都会加载结果,但当我开始快速点击复选框和滑块时,每次都会调用结果,而且在某些时候会停止工作。在每次变化后放置一些计时器并不是我所寻找的解决方案。
Jquery ajax实时结果问题
1
人关注
1
个评论
Fosco
:
那么,你正在寻找的解决方案是什么? 一个能让人们疯狂地到处点击的方案? 你应该展示你的代码,并澄清你想要什么。
Yovo
发布于
2011-06-09
2
个回答
Tadeck
发布于
2017-05-23
0
人赞同
正如这个答案中所说。
使用jQuery停止AJAX请求
,你可以将请求分配给一些变量,然后,如果这个变量被设置,
你可以在进行另一个调用之前停止已经等待的请求
。
这样一来,生效的结果将是最新的结果,应该不会有什么混淆。
我在这里粘贴我参考的答案。
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
你需要使用一个定时器,但不是为每个变化都使用一个,只是一个全局定时器。每次勾选复选框、移动滑块等,设置一个超时,例如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