jquery 为什么在重试发送不同的url请求时 AJAX

5us2dqdw  于 2022-12-26  发布在  jQuery
关注(0)|答案(2)|浏览(139)

我有个很奇怪的问题:我有产品列表,当你点击产品编辑产品,你去产品的形式。在这个产品的形式,我有AJAX发送请求到getFiltersGroup。我想重新发送这个AJAX的错误,但由于某种原因,错误的AJAX是开始发送产品的形式,而不是getFiltersGroup的URL请求。
有什么想法是错的,为什么不发送请求到getFiltersGroup
这是重试时发生的情况:

这是密码:

var retry;

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

    var product_id = "<?php echo isset($set_id) ? $set_id : NULL; ?>";
    
    var ajaxConfig = $.ajax({
      url: "index.php?route=catalog/product/getFiltersGroup&token=<?php echo $token ?>",
      type: "POST",
      data: '&product_id='+product_id,
      dataType: 'json',
      beforeSend: function(){
        $('#btn-product-filter-groups').prop('disabled', true);
      },
      success: function(data){
        clearInterval(retry);
        $('#btn-product-filter-groups').prop('disabled', false);
      },
      error: function(xmlhttprequest, textstatus, message) {
        
        retry = setInterval(function(){
          $.ajax(ajaxConfig);
        }, 6000)
      }
    });
})
    • 更新**

我修复了网址请求,但现在我不能重置setInverval()。而且我从来没有得到警报消息。任何想法是什么错了?

var retry;

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

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

    $.ajaxSetup({
      url: "index.php?route=catalog/product/getFiltersGroup&token=<?php echo $token ?>",
      type: "POST",
      data: '&product_id='+product_id,
      dataType: 'json'
    });
    
    var ajaxConfig = $.ajax({
      beforeSend: function(){
        $('#btn-product-filter-groups').prop('disabled', true);
      },
      success: function(data){
        alert('WTF')
        clearInterval(retry);
        $('#btn-product-filter-groups').prop('disabled', false);
      },
      error: function(xmlhttprequest, textstatus, message) {
        
        retry = setInterval(function(){
          $.ajax(ajaxConfig);
        }, 6000)
      }
    });
})

drnojrws

drnojrws1#

$.ajax()返回一个jqXHR对象,稍后您将把它作为新调用的配置对象传递给$.ajax()

var ajaxConfig = $.ajax({ ... });

// ...

$.ajax(ajaxConfig);

但是jqXHR对象不是$.ajax()配置对象,它没有url: ...键/值对(也没有任何其他设置)。查看$.ajax()配置对象的文档,它说:
jQuery. AJAX ([设置])设置类型:PlainObject配置 AJAX 请求的一组键/值对。所有设置都是可选的。
关于url设置:
url(默认值:当前页面)
由于config对象中没有指定URL,因此默认为当前页面。新的$.ajax()请求将请求当前页面,即编辑页面。
如果你想让你的 AJAX 调用一个可调用的函数,只要把它放在一个函数中并调用它:

function ajaxCall() {
    $.ajax({
        url: "index.php?route=catalog/product/getFiltersGroup&token=<?php echo $token ?>",
        type: "POST",
        // ... your code
        error: function(xmlhttprequest, textstatus, message) {
            retry = setInterval(ajaxCall, 6000)
        }
    });
}

$('#filters-ajax').on('click', function(){
    // ...
    ajaxCall();
});

这种方法对我来说发出了各种各样的递归警钟,虽然,我会考虑尝试另一种方法。

iaqfqrcu

iaqfqrcu2#

我不知道为什么,但这一个是工作的,如果有人能解释为什么这个代码是工作和以前的代码是不工作的,我会接受他的答案

$('#filters-ajax').on('click', function(){
        var product_id = "<?php echo isset($set_id) ? $set_id : NULL; ?>";

        $('#btn-product-filter-groups').prop('disabled', true);

        $(function callAjax(){
          $.ajax(`index.php?route=catalog/product/getFiltersGroup&token=<?php echo $token ?>&product_id=${product_id}`)
          .success( function(data) {
            $('#btn-product-filter-groups').prop('disabled', true);
          })
          .error(function() {
            setTimeout ( function(){ callAjax() }, 6000);
          });
        })
      }
    })

相关问题