我有结果页面,其中结果加载了ajax,我有jq ui滑块的价格和复选框,它们会改变结果。在每次更改时,结果都会加载,但是当我开始快速单击复选框和滑块时,它会每次调用结果,并且在某些时候它会停止工作。每次更改后放置一些计时器都不是我要找的解决方案。
答案 0 :(得分:1)
您需要使用计时器,但不是每个更改只使用一个计时器,只需1个全局计时器。每次选中复选框,移动滑块等,设置超时,例如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
}
答案 1 :(得分:0)
如本回答所述:Stop AJAX Request using jQuery,您可以将请求分配给某个变量,然后,如果设置了此变量,您可以在再次拨打电话之前停止已暂挂的请求。
这样,生效的结果将是最新结果,不应混淆。
我在这里粘贴了我引用的答案:
var request = $.ajax({
type: 'POST',
url: 'someurl',
success: function(result){}
});
然后你可以中止请求:
request.abort();