Javascript 使用ajax调用在函数之间调用相同的函数

Javascript 使用ajax调用在函数之间调用相同的函数,javascript,jquery,ajax,recursion,Javascript,Jquery,Ajax,Recursion,我有点迷路了! 下面的代码显示了我打算做的事情,基本上我有一个函数insertChilds(),它在DOM中以级联方式插入子元素,就像(或者应该这样做…) 这里的问题是,我调用$.ajax来获取第一个元素child,在函数之间,我必须进行其他ajax调用来获取child的child,这些可以是“n”-child 我遇到了麻烦,因为当我进行第二次ajax调用(再次调用内部相同的函数)时,ajax调用被抛在后面,项目显示混乱 谢谢你的指导,我不太擅长编程yk 代码: 函数insertChilds(i

我有点迷路了! 下面的代码显示了我打算做的事情,基本上我有一个函数insertChilds(),它在DOM中以级联方式插入子元素,就像(或者应该这样做…)

这里的问题是,我调用$.ajax来获取第一个元素child,在函数之间,我必须进行其他ajax调用来获取child的child,这些可以是“n”-child

我遇到了麻烦,因为当我进行第二次ajax调用(再次调用内部相同的函数)时,ajax调用被抛在后面,项目显示混乱

谢谢你的指导,我不太擅长编程yk

代码:

函数insertChilds(id,after){
var subtar=“”;
var级别=”;
$.ajax({
url:“get_tasktypes.php”,
类型:“POST”,
数据:{
id:id
},
数据类型:“json”,
成功:函数(json){
//log(json);
如果(json.length>0){
如果(在!=0之后){
var levelParts=在.split(“-”)之后;
level=levelParts.length;
如果(级别!=0){
var marginLeft=(级别*50)+'px;';
}否则{
var marginLeft='50px';
}
}否则{
级别=0;
var marginLeft='50px';
}
subTar=subTar+'
    ”;
    对于(var i=0;i为什么要使用这种方法,在已经运行的调用中使用ajax调用。相反,首先通过发送一个ajax调用收集您的所有子对象,然后将其放置。仍然要使用这种方法在循环中发送同步ajax调用,而不是嵌套调用。 创建ajax调用同步集的步骤

    async : false
    

    如果您的AJAX调用是异步的(我假设是异步的),那么您的代码将面临两个问题

    首先,HTTP 1.1 RFC表示客户端(在您的情况下,这是运行脚本的web浏览器)应该将持久连接的数量限制为2。这意味着只有两个ajax调用将同时运行,其余调用将排队。现在许多浏览器都不符合该数量,但仍然有一个限制

    第二个问题是,没有必要保证ajax调用的响应返回到程序的顺序,这可能是导致响应返回顺序错误的原因


    我建议只使用一个ajax调用,在服务器端将树编译成一个数据结构,然后使用ajax和json一次性传输整个内容。这样,您就可以在客户端通过结构进行递归,而不是对服务器进行每一级递归调用。

    您的意思是获取在服务器端调用它们?不,在您的ajax响应中,即成功。如果您查看代码,我将在成功时进行下一个ajax调用,但可能会有几个成功的调用,“n”一个。哦,看来你的下一个调用取决于上一个调用的响应。好吧-这种方法仍然不推荐。因为,根据你的代码,你的调用是异步的,并且你在循环中使用它。这意味着它不会等待上一个调用的响应并发送下一个调用,这就是为什么你的孩子在放置时缺少顺序解决方案是-将下一次调用的输入保存在变量中,并在上一次调用完成后使用该变量,然后发送下一次调用,更新html和更新变量并发送下一次调用,依此类推。确保所有调用都是同步的。我不乐意给出上一个解决方案。尝试更新逻辑并通过发送单个调用。您也可以发送列表,而不是单个参数。因此,请先获取所有参数,然后在单个调用中发送一次。这将是同步的,并且工作速度很快。非常感谢,我正在考虑结束此操作,我正在尝试让服务器返回所有内容,然后仅在客户端用jquery显示石斑鱼类。
    async : false