如何通知模块的另一部分有关全局AJAX请求完成的信息?

How to notify another piece of a module about a global AJAX request finishing?

提问人:Timothy Fisher 提问时间:3/29/2023 更新时间:3/29/2023 访问量:17

问:

我正在模块化框架中进行开发,需要在所有页面上执行 AJAX 请求。请求的结果将包含模块的另一部分需要的数据。该部分仅在某些页面上执行。我正在寻找仅在 AJAX 请求完成后执行代码的常见模式,并且不直接访问该 AJAX 请求的回调。

我知道我可以从成功回调中发出一个事件,如下所示:

// pseudo code
$.ajax({
    url: url,
    data: data
}).success(function (result) {
    $(document).trigger('result-ready', result);
});

问题在于,这将要求需要侦听该事件的代码始终在发出 AJAX 请求之前执行。但是,我不确定我是否可以保证没有竞争条件,因为所有脚本都声明为:async

// pseudo code
<script async src="my/ajax/listener.js></script>
<script async src="my/ajax/request.js"></script>

因此,据我了解,如果文件包含的代码执行时间比 AJAX 请求长,则该事件可能会在挂接之前触发。listener.js

我想我可以不做异步或内联脚本,这会起作用。我想我也可以将 AJAX 请求转换为服务器端请求,该请求为侦听器脚本输出必要的数据,但我很好奇是否有任何其他模式/方法可以使用 JS 处理此问题以及脚本何时是异步的。listener.js

JavaScript Ajax 异步 事件 模块

评论


答: 暂无答案