2016-02-26 93 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

我的递归调用中增加了一个额外的参数覆盖了函数引用,谢谢凯尔!