Jquery ajax实时结果问题

时间:2011-06-08 18:44:58

标签: jquery ajax live

我有结果页面,其中结果加载了ajax,我有jq ui滑块的价格和复选框,它们会改变结果。在每次更改时,结果都会加载,但是当我开始快速单击复选框和滑块时,它会每次调用结果,并且在某些时候它会停止工作。每次更改后放置一些计时器都不是我要找的解决方案。

2 个答案:

答案 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();