gpt4 book ai didi

javascript - 为什么ajax调用两个页面方法同步执行?

转载 作者:行者123 更新时间:2023-11-30 08:01:22 25 4
gpt4 key购买 nike

我在页面上有两个脚本标签,每个都包含一个 document.ready(),并且每个标签都对页面方法进行 ajax 调用。

第一个将值加载到选择列表中。第二个将树加载到 DOM 中。

<script>
$(document).ready(function() {
$.ajax({
url: 'PageMethods.aspx/GetTop50',
async: true,
success: function(data) {
//loads the values to the select list
}
//rest of stuff...
});
})
</script>

<script>
$(document).ready(function() {
$.ajax({
url: 'Default.aspx/GetTree',
async: true,
success: function(data) {
// loads the tree into DOM
}
//rest of stuff...
});
})
</script>

为什么我的 GetTree 页面方法只在 GetTop50 的成功回调之后才继续执行?我将断点设置为服务器端的 GetTree 方法,它仅在加载选择列表后命中。

最佳答案

客户端将一个接一个地启动两个 ajax 调用,以便它们同时“进行中”。然后由服务器决定哪个先完成并取决于服务器的配置方式(它是否会同时处理多个请求)以及每个请求正在做什么。

如果您的服务器一次只处理一个请求,或者如果它阻塞在某些共享资源(例如数据库)上,那么它可能会在返回第二个请求结果之前返回它收到的第一个请求 - 尽管这只是一个可能的选择,当然不是一个有保证的选择。例如,如果第一个请求几乎总是比第二个请求花费更长的时间来处理,并且它们不会争用同一共享资源,那么第二个请求可能会先完成并首先返回其结果。

请求返回的顺序也是随机的,有时一个请求先返回,有时另一个请求先返回。正如我之前所说,这完全取决于服务器如何处理每个请求以及它首先完成哪个请求。


此外,请记住,客户端 JS 是单线程的,因此当您位于某个客户端 JS 断点处时,其他 JS 无法运行,直到当前 JS 线程执行完成。至于服务器端断点的行为,这完全取决于服务器执行环境是什么以及它在断点期间如何工作。


如果你想调试与时间相关的东西,断点不是一种可靠的测试方法,因为击中断点本身很容易影响行为。相反,您应该使用带有准确时间戳的日志记录来研究事件的确切顺序。

关于javascript - 为什么ajax调用两个页面方法同步执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27500410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com