2017-09-26 35 views
2

我使用ajaxForm發送數據到後臺運行的php文件,並且一些js函數將檢查php文件是否正在異步運行。因此,如果出現故障(互聯網/電力不足),我希望我的用戶能夠重試最後一次表單提交。所以我發現了一些阿賈克斯重試函數,best way to retry ajax,但它在相同的ajax請求上,我需要能夠從另一個函數重試我的ajax。它甚至有可能嗎?鑑於我在表單中存儲傳遞的值。 ajaxForm如果需要重新提交

$(document).ready(function(){ 
 
$('#form').ajaxForm({ 
 
    target: '#ajax-response', 
 
    success: function(){ 
 
\t initAjaxCheck(); 
 
    } 
 
}); 
 
lockCheck(); 
 
});
所以,基本上lockcheck()檢查進程是否仍在乳寧後,頁面刷新/重載,如果用prevous運行中檢測到任何故障,它應該能夠重試表單提交。

這裏的JS腳本:

function lockCheck(){ 
 
    $.ajax({ 
 
\t type:"POST", 
 
     url:"analysisquery.php", 
 
     data:{'flag':'lockCheck'}, 
 
     success:function(result){ 
 
    \t  if (result=="1") { //not finished/unsuccessful 
 
    \t \t initAjaxCheck(); 
 
    \t  } 
 
     } 
 
    }); 
 
} 
 

 

 

 
function initAjaxCheck(){ 
 
    $.ajax({ 
 
     type:"POST", 
 
     url:"analysisquery.php", 
 
     data:{'flag':'initProcCheck'}, 
 
     success:function(data){ 
 
    \t  if (data=="1"){ //just not finished 
 
\t \t spinnerLoad(); 
 
\t \t timerCheck=setInterval(function(){ 
 
\t \t  ajaxCheck(timerCheck); 
 
\t \t },1000); 
 
      } else { //unsuccessful 
 
      var toRepeat = confirm ("Last try was unsuccessful. Retry?"); 
 
      if (toRepeat){alert("retry");} else {alert("cancel");} 
 
      } 
 
     } 
 
    }); 
 
}

所以,如果我的用戶按重試,我應該有重試我給ajaxForm提交。

+0

我想你可以在每次用戶按重試時調用'initAjaxCheck()'。 Javascript函數可以在函數內調用自己。這被稱爲遞歸函數。 –

+0

@JacobGoh它會將我的表單值傳遞給async php嗎? 'initAjaxCheck'只是一個檢查進程的函數,如果'ajaxForm'的狀態是'success'。 – upicik

+1

對不起,我真的明白你的功能。我知道你的數據如何流動。但是你可以把數據放入一個變量中,並在每個Ajax調用之前檢查數據是否存在。如果重新提交的數據不存在,只需使用'$('#my_input_field')。val()''來獲取表單值1並將值傳遞給ajax調用。希望這可以幫助。 –

回答

1

我有點困惑於你究竟在問什麼,但我相信我有點理解。

觸發表單提交。

$('#form').trigger("submit"); 

var event = jQuery.Event("submit"); 
$('#form').trigger(event); 

要在代碼中實現這一點,只需您confirm功能之後添加它。

var toRepeat = confirm ("Last try was unsuccessful. Retry?"); 

if (toRepeat){ 
    alert("retry"); 
    $('#form').trigger("submit"); 
} else { 
    alert("cancel"); 
}