如何在同一个ajax调用失败时重新初始化ajax调用?

时间:2014-01-21 10:25:53

标签: javascript php ajax jquery

我正在进行需要运行的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;

}

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

5 个答案:

答案 0 :(得分:2)

您可以这样做:

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

doAjax();

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

答案 1 :(得分: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" );
      });
  }
}

我希望它可以帮到你。

答案 2 :(得分:1)

尝试以下代码:

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

})

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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

如果我错了,请提供相同的反馈