2016-02-26 92 views
0

我試圖創建一個遞歸的$ .ajax()調用方,調用ARIs,它可以在引用回調函數之前根據輸入運行一些$ .ajax()調用序列。這是爲了要在表單提交運行,是用3個功能設置:遞歸&傳遞Ajax回調

jQuery.fn.submitHandler = function(AjaxCallerInput,Callback){ 
     $(this).submit(function(e){ 
      e.preventDefault(); 

      //Validate & Gather Form Data 

      if(!Valid){ /*ERROR*/ } 
      else{ callARIs(AjaxCallerInput,formData,null,Callback); } 
     } 
} 
function callARIs(Input,formData,i,Callback){ 

    //Process Input to create PostStr and define i if null 

    $.ajax({ //Call ARI 
     url: 'ajax.php', method: 'POST', async:true, data: PostStr + formData, 
     complete: function(xhr){ 
      if(i < Input.length-1){ return callARIs(Input,poststr,i+1,sqi,Callback); } 
      else{ return Callback(xhr.responseText); } 
     } 
    }); 
} 

function someCallback(){ //do stuff with final ajax result } 

$("form").submitHandler("ARIstr",someCallback); 

的遞歸和AJAX調用按預期都跑,問題是,回調是「不是一個函數」,當談到時間運行。我認爲這是由於通過遞歸傳遞參考而被破壞的。
我想找到一種方法使submitHandler能夠定義callARIs的參數和表單提交所需的回調。我可以通過傳遞索引和編寫邏輯來調用callARI中的正確函數來解決此問題,但我希望獲得更優雅的解決方案,在創建新表單和回調時不需要更新callARIs或submitHandler。
在此先感謝您瞭解我如何解決此問題。

+1

看起來'sqi'正在作爲遞歸調用'callARIs'的第四個參數傳遞。這有效地取代了你的'回調'參數(可能不是函數)。 – Kyle

+0

......現在我只是覺得愚蠢....但是,謝謝沒有那麼少凱爾,我不知道我錯過了這一點,當我刪除sqi作爲所需的參數 – M31

+0

錯別字總是粗糙。別擔心。 – Kyle

回答

0

我的遞歸調用中增加了一個額外的參數覆蓋了函數引用,謝謝凱爾!