【问题标题】:How to reinitiliaze the ajax call when the same ajax call fails? [duplicate]当同一个ajax调用失败时如何重新初始化ajax调用? [复制]
【发布时间】:2014-02-10 21:16:13
【问题描述】:

我有一个需要运行的 ajax 调用,如果它失败了,那么它应该重新初始化相同的 ajax。正如我浏览过的一些帖子,我们可以告诉用户ajax调用失败并遵循一些功能。

但我希望在失败或其他地方重新初始化相同的 ajax 调用,以便当该 ajax 失败时它再次失败。

deleteImage : function(objId,thumburl,original,ev){

    jQuery('#imageBlocksDiv').append(jQuery("#confirmboxtmp").html());
    setToCenterOfParent( $('#confirmbox'), document.body, false, true );
    jQuery("#confirmbox").fadeIn().css({top:-210,position:'fixed'}).animate({top:50}, 100, function() {});
    jQuery('#deleteconfirmbox').click(function(){
        jQuery(this).text('Deleting..');
        if(typeof objId!='undefined'){

            var iputadatatologdelete = {
                "media_image_objectId": objId,
                "action" : "deleted"    
            };
            iputadatatologdelete.company_objectId = jQuery('#cid').val();
            iputadatatologdelete.edited_by_user_objectId = jQuery('#uid').val();

            var inputData = {
            'id' : objId,
            'imgurl' : original,
            'thumburl' : thumburl
            }

            jQuery.ajax({
                'type':'POST',
                'url': '#####/a###pi/###/####/#####',
                'data' : inputData,
                success : function(response){ //console.log(response)
                    jQuery('#'+objId).parents().eq(2).remove();
                    console.log(objId);
                    jQuery('#confirmbox').hide();
                    jQuery('#deleteconfirmbox').text('Delete');
                    pinterest(undefined);
                    logdata("sc_media_image_edited_log", iputadatatologdelete)
                }
            });
 }

如果我为我正在调用的每一种 ajax 创建函数,那么函数就是这样的,那么这将是一堆代码。因为我已经用不同的 url 和类型制作了大量的 ajax。

    error : function(xhr, textStatus, errorThrown ) {

            //try again
            $.ajax(this);
            return;

}

如果重新初始化相同的查询,这是否有效。

【问题讨论】:

  • 发送您的代码以便我修改。
  • Rubb 很抱歉,如果它是并且怀疑 $.ajax(this) 失败。这可以重新初始化ajax
  • 您好,我添加了一些代码,可能有助于以更有效的方式描述问题

标签: javascript php ajax jquery


【解决方案1】:

你可以这样做:

function doAjax() {
  $.ajax({
    url: ...
    success: ...
    error: doAjax
  });
}

doAjax();

请注意,在连续失败的情况下,这将无限循环,除非您实施保护机制(例如,计数器和在多次失败尝试后停止循环的条件)。

【讨论】:

    【解决方案2】:

    要调用完全相同的 ajax,您可以递归地调用它,如下所示:

    function callAjax(){
      $.ajax( "example.php" )
      .done(function() {
        alert( "success" );
      })
      .fail(function() {
        callAjax();
      })
      .always(function() {
        alert( "complete" );
      });
    }
    

    否则你可以用一个“控制变量”来控制它,像这样:

    function callAjax(){
      var control = 0;
      while (control === 0){
          $.ajax( "example.php" )
          .done(function() {
            alert( "success" );
            control = 1;
          })
          .fail(function() {
            alert( "fail" );
          })
          .always(function() {
            alert( "complete" );
          });
      }
    }
    

    希望对你有帮助。

    【讨论】:

    • 是的,我认为这里的第二段代码是最好的答案,除了你应该有 .success 而不是 .done
    • @AndreiCristianProdan,.success 方法已被弃用。来自 jQuery 的官方页面:“成功回调选项的替代构造,.done() 方法替换了已弃用的 jqXHR.success() 方法。”
    • 添加 jQuery.ajax(this);失败会再次调用ajax
    【解决方案3】:

    在错误回调中,调用相同的ajax请求方法

    【讨论】:

      【解决方案4】:

      试试下面的代码:

      $(document).ready(function(){    
          (function callAjax(){
              $.ajax({ 
                  url: url,             
                  success: function(res){ },            
                  complete: callAjax            
              });
          })();
      
      })
      

      您可以为此使用“完成”功能,因为您要么获得成功,要么错误完成功能将在每种情况下调用..http://api.jquery.com/jquery.ajax/

      【讨论】:

        【解决方案5】:

        在失败函数中,我们可以通过以下几行重置相同的 ajax 调用。

            error : function(xhr, textStatus, errorThrown ) {
                        jQuery.ajax(this);
                        return;
            },  
        

        如果我有些地方错了,请给出相同的反馈

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多