需要使用abort和时间间隔

时间:2016-06-08 04:34:11

标签: ajax

我有一个带有js函数refreshme()的SELECT元素,它将调用change事件。

<select id="cat" name="cat" multiple  onchange="refreshme()">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

<div id="result"></div>


<script>
function refreshme()
{
     /* i need output in $('#result').html(data) */
}
</script>

这里我想在更改选择/取消选择列表框项目时使用ajax调用URL“demo.php”。问题是,当用户选择项目时,它会立即调用ajax函数。我想设置一些内部,以便如果用户逐个选择列表框,那么ajax不会调用。我想设置大约2秒的差距。这意味着应该在最后一个选定项目的2秒后调用ajax调用。如果用户选择任何其他列表框,则ajax调用在运行并等待结果时将中止。

2 个答案:

答案 0 :(得分:1)

以下方法只会破坏不在服务器端的客户端请求。可能它会帮助你

<script>

function refreshme()
{
    if(ajaxcall)
     {

       ajaxcall.abort();  //abort the previous request 
     }

    var ajaxcall = $.ajax() ;  //ajax request start here assign to variable 

    //here you can also use array and destroy it using for loop    
}

</script>

答案 1 :(得分:0)

我用ajax和计时器得到了答案。也许这可能对其他人有所帮助。

<select id="cat" name="cat" multiple  onchange="refreshme()">
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
</select>

<div id="result"></div>


<script>

var timer;
var x;

function refreshme()
{
    $('#result').html('');

    if (x) { x.abort() } // XHR  abort 
    clearTimeout(timer); // Clear the timer  
    timer = setTimeout(function() {  
        x = $.post('demo.php',function(data){
            $('#result').html(data);
            }); // run ajax request and store in x variable  
    }, 2000); // 2000ms delay 

}
</script>