2014-01-21 61 views
0

我有一個需要運行的ajax調用,如果失敗了,那麼它應該重新初始化相同的ajax。正如我已經通過一些帖子有失敗的功能下,我們可以告訴用戶,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和type來加載ajax。

error : function(xhr, textStatus, errorThrown) { 

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

} 

將在重新初始化相同查詢的情況下工作。

+0

發送的代碼,這樣我可以修改它。 – Partap

+0

Rubb和所有抱歉,如果是這樣,並懷疑$ .ajax(this)失敗。這可以重新初始化AJAX –

+0

嗨,我添加了一些代碼,可以幫助來形容更有效的方式問題 –

回答

2

你可以做這樣的事情:

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"); 
     }); 
    } 
} 

我希望它能幫助你。

+0

是啊,我覺得這裏的代碼的第二塊是最好的答案,但你應該有.success代替.done –

+0

@AndreiCristianProdan,.success方法已被棄用。從jQuery官方頁面:「成功回調選項的替代構造,.done()方法取代了棄用的jqXHR.success()方法。」 –

+0

加入jQuery.ajax(this);失敗後會再次調用ajax –

1

試試下面的代碼:

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

}) 

您可以使用爲「完成」功能,因爲你要麼成功或錯誤的完整功能將在每種情況下調用.. http://api.jquery.com/jquery.ajax/

1

在錯誤回調,調用相同的ajax請求方法

0

由於在故障功能,我們可以通過下面的行重置相同的ajax調用。

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

如果我一些地方錯了,請給予反饋在同