jqueryajax实时结果问题

jqueryajax实时结果问题,jquery,ajax,live,Jquery,Ajax,Live,我有一个结果页面,其中的结果是用ajax加载的,我有用于价格的JQUI滑块和更改实时结果的复选框。每次更改都会加载结果,但当我开始快速单击复选框和滑块时,它会每次调用结果,并且在某个点停止工作。在每次更改后放置一些计时器并不是我想要的解决方案。如此答案中所述:,您可以将请求分配给某个变量,然后,如果设置了此变量,您可以在再次调用之前停止已挂起的请求 这样,将生效的结果将是最新的结果,不应出现混淆 我在这里粘贴我引用的答案: var request = $.ajax({ type: 'PO

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

如此答案中所述:,您可以将请求分配给某个变量,然后,如果设置了此变量,您可以在再次调用之前停止已挂起的请求

这样,将生效的结果将是最新的结果,不应出现混淆

我在这里粘贴我引用的答案:

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){}
});
然后您可以中止请求:

request.abort();
如回答中所述:,您可以将请求分配给某个变量,然后,如果设置了该变量,您可以在进行另一次调用之前停止已挂起的请求

这样,将生效的结果将是最新的结果,不应出现混淆

我在这里粘贴我引用的答案:

var request = $.ajax({
    type: 'POST',
    url: 'someurl',
    success: function(result){}
});
然后您可以中止请求:

request.abort();

您需要使用一个计时器,但不是每次更改都使用一个,只有一个全局计时器。每次选中复选框、移动滑块等时,设置一个超时,例如500毫秒,以提交ajax请求。但每次进行更改时,也要清除现有计时器,并设置一个新的计时器

这样,提交仅在500毫秒不活动后发生。如果用户点击快乐,计时器每次都会被清除,只有在用户停止点击之后,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
}

您需要使用一个计时器,但不是每次更改都使用一个,只有一个全局计时器。每次选中复选框、移动滑块等时,设置一个超时,例如500毫秒,以提交ajax请求。但每次进行更改时,也要清除现有计时器,并设置一个新的计时器

这样,提交仅在500毫秒不活动后发生。如果用户点击快乐,计时器每次都会被清除,只有在用户停止点击之后,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
}

那么你在寻找什么样的解决方案呢?一个可以让人们疯狂点击任何地方的网站?你应该展示你的代码并阐明你想要什么。那么你在寻找什么样的解决方案呢?一个可以让人们疯狂点击任何地方的网站?你应该显示你的代码,并澄清你想要什么。也许这是解决方案,但我应该抓取所有输入每次看到的变化。这就是我的看法。是否有其他方式查看更改?您不必每次都抓取所有输入。只有一次绑定事件。提交值时,可以全部提交并让服务器决定使用哪些值,也可以记录以前的值并仅提交已更改的值。更好的是,您可以向每个元素添加一个属性,指示它是否已被修改。请参见上面的示例…也许这就是解决方案,但我应该每次抓取所有输入以查看更改。这就是我的看法。是否有其他方式查看更改?您不必每次都抓取所有输入。只有一次绑定事件。提交值时,可以全部提交并让服务器决定使用哪些值,也可以记录以前的值并仅提交已更改的值。更好的是,您可以向每个元素添加一个属性,指示它是否已被修改。请参见上面的示例…如何检查ajax调用是否已启动。我尝试了if(request!=“”){request.abort();},但效果不太好。@Yovo尝试使用
if(typeof request!='undefined'){
作为条件。谢谢,但我尝试了几种类似于此的方法,但它总是在某个点中断。我每次调用同一个函数,如果正在进行,我会尝试对其进行cill,因此我相信如果您知道我希望如何在此处执行此操作,则有另一种方法。我如何检查ajax调用是否已启动。我尝试了if(request!=“”){request.abort();}但它不能正常工作。@请尝试使用
if(请求类型!=“未定义”){
作为条件。谢谢,但我尝试了几种像这样的方法,它总是在某个点中断。我每次调用一个相同的函数,如果它正在进行中,我会尝试对它进行cill,所以我相信如果你知道我想如何在这里使用它,有另一种方法可以做到这一点。