jquery AJAX 超时重试,无需等待再次超时

zbdgwd5y  于 2022-12-18  发布在  jQuery
关注(0)|答案(1)|浏览(198)

我试图重新发送 AJAX 每5秒,如果出了问题,但由于某种原因,当我模拟离线连接与Chrom ajax请求被称为不间断的wtihout等待5秒后,每个请求。
我做错了什么?顺便说一句,我没有得到任何这些控制台。登录我的浏览器控制台

$('#filters-ajax').one('click', function(){

      var product_id = "<?php echo isset($set_id) ? $set_id : NULL; ?>";

      $.ajax({
        url: "index.php?route=catalog/product/getFiltersGroup&token=<?php echo $token ?>",
        type: "POST",
        data: '&product_id='+product_id,
        dataType: 'JSON',
        timeout: 5000,
        beforeSend: function(){
          $('#btn-product-filter-groups').attr('disabled', true);
        },
        success: function(data){
          $('#btn-product-filter-groups').attr('disabled', false);
        },
        error: function(xmlhttprequest, textstatus, message) {
          console.log(xmlhttprequest);
          console.log(textstatus);
          console.log(message);
          
          $.ajax(this);
        }
      });
    })
htrmnn0y

htrmnn0y1#

$.ajax()选项对象的timeout属性不定义延迟执行。相反,它用于在指定时间内未完成请求时取消请求。
如果您希望重复 AJAX 调用并在其间定义时间,则必须使用setTimeout()setInterval()进行设置。
下面是setInterval()的代码片段:

const url="https://jsonplaceholder.typicode.com/posts/";
const iv=setInterval(()=>
$.ajax({
    url: url+Math.ceil(Math.random()*50),
    /* type: "POST",
    data: '&product_id='+product_id, */
    dataType: 'JSON',
    /* beforeSend: function(){
      $('#btn-product-filter-groups').attr('disabled', true);
    }, */
    success: function(data){
      console.log(data.title)
    },
    error: function(xmlhttprequest, textstatus, message) {
      console.log(xmlhttprequest);
      console.log(textstatus);
      console.log(message);          
      // $.ajax(this);
    }
  }), 1000);
document.querySelector("button").onclick=()=>clearInterval(iv)
<script src="https://code.jquery.com/jquery-3.6.2.min.js"></script>
<button>stop AJAX</button>

相关问题