簡體   English   中英

Ajax超時重試無需等待再次超時

[英]Ajax timeout retry without waiting to timeout again

如果出現問題,我會嘗試每 5 秒重新發送一次 ajax,但由於某種原因,當我模擬與 Chrom ajax 的離線連接時,ajax 請求被稱為不間斷,每次請求后等待 5 秒。

我做錯了什么? 順便說一句,我在我的瀏覽器控制台中沒有收到任何 console.logs

    $('#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);
        }
      });
    })

$.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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM