Javascript 没有回调成功函数的嵌套AJAX请求

Javascript 没有回调成功函数的嵌套AJAX请求,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,阅读本帖后 大家好,我需要解释一下这种情况。 我刚刚研究了我的开发团队的一位前成员的代码,发现代码中有很多部分是他在其他ajax调用中进行异步ajax调用的 我的问题是:有人能解释这种做法的优点和缺点,以及它是好的还是坏的做法吗 下面是一个代码示例: // first ajax (starting ajax call) $.ajax({ url: "script1.php", type: "POST", data: {paramFisrtAjax: "first-aj

阅读本帖后

大家好,我需要解释一下这种情况。 我刚刚研究了我的开发团队的一位前成员的代码,发现代码中有很多部分是他在其他ajax调用中进行异步ajax调用的

我的问题是:有人能解释这种做法的优点和缺点,以及它是好的还是坏的做法吗

下面是一个代码示例:

// first ajax (starting ajax call)
$.ajax({
    url: "script1.php", 
    type: "POST", 
    data: {paramFisrtAjax: "first-ajax"},
    success: function(response) {
       alert(response);
    }
});
script1.php

<script>    
// second ajax
$.ajax({
    url: "script2.php", 
    type: "POST", 
    data: {paramFirstAjax: "<?= $_POST['paramFisrtAjax'] ?>", paramSecondAjax: "second-ajax"},
    success: function(response) {
        alert(response);
    }
});
</script>
<?php 
// some operations on database server
echo "page2 operations with param: paramFirstAjax-> {$_POST['paramFirstAjax']}"; 
?>

//第二个ajax
$.ajax({
url:“script2.php”,
类型:“POST”,
数据:{paramFirstAjax:,paramSecondAjax:“SecondAJAX”},
成功:功能(响应){
警报(响应);
}
});

这里有优点也有缺点

优点是:

1) 进行异步调用,使请求速度大大加快。您不必等待回调函数,因此也不必等待可能需要时间才能返回的响应。你所做的一切都是背景而不是“直截了当”。 当您调用多个方法并且不希望在等待回调时出现延迟时,这是可以理解的

2) 您可以通过呼叫获取更多数据,同时最大限度地减少终端客户端等待的需要。 当您有大量数据要显示,并且希望以最小的工作量完成时,这非常有用

缺点:

1) 错误处理是一种痛苦。I如果内部调用中出现故障,则需要时间来检测是否发生了故障以及故障发生在哪个方法上。 在等待回调时,您可以立即检测错误发生的位置,因为它将返回成功或错误的响应

2) 如果数据不匹配,则很难追溯并查看缺失部分发生的位置,您必须逐个检查每个请求,以检测并使用开发人员工具和/或fiddler,因为这些都是最后的异步调用

3) 很容易在客户机上花费太多精力,因为维护这种技术可能会导致调用多个同时工作的方法,从而在使用服务器端代码时在客户机上造成过载、线程锁定或DB


这说明了,您现在可以自己决定在代码中继续使用哪种类型的方法。

这里有优点也有缺点

优点是:

1) 进行异步调用,使请求速度大大加快。您不必等待回调函数,因此也不必等待可能需要时间才能返回的响应。你所做的一切都是背景而不是“直截了当”。 当您调用多个方法并且不希望在等待回调时出现延迟时,这是可以理解的

2) 您可以通过呼叫获取更多数据,同时最大限度地减少终端客户端等待的需要。 当您有大量数据要显示,并且希望以最小的工作量完成时,这非常有用

缺点:

1) 错误处理是一种痛苦。I如果内部调用中出现故障,则需要时间来检测是否发生了故障以及故障发生在哪个方法上。 在等待回调时,您可以立即检测错误发生的位置,因为它将返回成功或错误的响应

2) 如果数据不匹配,则很难追溯并查看缺失部分发生的位置,您必须逐个检查每个请求,以检测并使用开发人员工具和/或fiddler,因为这些都是最后的异步调用

3) 很容易在客户机上花费太多精力,因为维护这种技术可能会导致调用多个同时工作的方法,从而在使用服务器端代码时在客户机上造成过载、线程锁定或DB


这说明了,您现在可以自己决定在代码中继续使用哪种类型的方法。

这取决于具体情况,第二个ajax调用是否取决于第一个调用的结论?这里有两个jQuery ajax调用,但没有上下文。没有设置变量,回调中没有代码。没有上下文,这个问题就无法回答。如果他没有使用“success”,那么他究竟是如何在另一个ajax调用中使用它的呢?它是否使用基于承诺的替代语法(例如“.done()2方法?)。您还没有显示这两个调用是如何嵌套的。只是上下文中显示了两个几乎相同的代码示例。在不知道实际代码是如何组合在一起的情况下,不可能真正回答。我将代码剪切为清楚,现在我指定参数Stack Overflow不是为了收集人们的意见。请询问一个可回答的问题ion,不是民意测验。这取决于具体情况,第二个ajax调用是否取决于第一个调用的结论?这里有两个jQuery ajax调用,但没有上下文。没有设置变量,回调中没有代码。没有上下文,这个问题就无法回答。如果他没有使用“成功”,那么他在“成功”中还怎么做“准确地说,又是一个ajax调用?它是否使用基于承诺的替代语法(例如“.done()2方法?)。您还没有显示这两个调用是如何嵌套的。只是上下文中显示了两个几乎相同的代码示例。在不知道实际代码是如何组合在一起的情况下,不可能真正回答。我将代码剪切为清楚,现在我指定参数Stack Overflow不是为了收集人们的意见。请询问一个可回答的问题不是民意测验。
<?php 
// some operations on database server
echo "page3 operations with params: firstParam -> {$_POST['paramFisrtAjax']} and secondParam-> {$_POST['paramSecondAjax']}";
?>