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

Posted

技术标签:

【中文标题】没有回调成功函数的嵌套 AJAX 请求【英文标题】:Nested AJAX requests without a callback success function 【发布时间】:2017-11-20 10:54:03 【问题描述】:

看完本帖 jQuery Ajax Request inside Ajax Request

大家好,我需要对这种情况进行解释。 我刚刚在编写我的开发团队前成员的代码,发现他在其他 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']"; 
?>

script2.php

<?php 
// some operations on database server
echo "page3 operations with params: firstParam -> $_POST['paramFisrtAjax'] and secondParam-> $_POST['paramSecondAjax']";
?>

有些东西告诉我这不是一件好事,因为我认为正确的方法是使用回调函数success。 像这样:jquery nested ajax calls formatting

【问题讨论】:

那要看情况,是不是第二个ajax调用取决于第一个的结论? 这里有两个 jQuery Ajax 调用,但没有上下文。没有设置变量,回调中没有代码。没有上下文就无法回答这个问题。 如果他没有使用“成功”,那么他究竟是如何在另一个 ajax 调用“内”做到这一点的呢?是否使用基于 promise 的替代语法(例如“.done()2 方法?)。您还没有展示这两个调用是如何嵌套的。只有两个几乎相同的代码示例脱离上下文显示。不知道实际的、真实的代码是如何组合在一起的,这真的不可能回答。 我把代码删掉了,现在我指定参数 Stack Overflow 不是为了收集人的意见。请提出一个可以回答的问题,而不是民意调查。 help center 【参考方案1】:

这里有一个优点和一个缺点。

优点是:

1) 您进行异步调用,使请求速度更快。您无需等待回调函数,因此您无需等待可能需要时间返回的响应。你在后台做所有事情,而不是“直截了当”。 当您调用多个方法并且您不希望等待回调的延迟时,这是可以理解的。

2) 您可以通过调用获取更多数据,同时最大限度地减少终端客户端的等待需求。 当您要显示大量数据并且希望以最少的努力完成时,这很有用。

缺点:

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

2)如果数据不匹配,则很难追溯并查看丢失的部分发生在哪里,您将必须逐个处理每个请求检测和使用开发人员工具和/或提琴手,因为这些都是异步调用。

3) 很容易在客户端上投入太多精力,因为维护这种技术可能会导致调用多个同时工作的方法,从而创建在使用服务器端代码时,客户端过载、线程或数据库锁定等等。

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

【讨论】:

以上是关于没有回调成功函数的嵌套 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章

拥抱基于jquery.deferred的ajax,和层层嵌套回调的ajax说拜拜

请求数据成功,但回调方法出错,请检查自定义load回调函数

promise

ajax回调函数无法获取后台传过来的值(SSM框架),大神请指教!

如何设置bootstraptable插件在ajax请求成功后的回调函数

Promise全解析