javascript - 使用 fetch API 时在 AJAX 调用期间显示微调器

标签 javascript ajax fetch-api

在我的项目中,我正在迁移到 React,因此不加载 JQuery。因为我不再使用 JQuery,所以对于 AJAX 调用,我使用的是 fetch。使用 JQuery,我可以 Hook AJAX 调用的开始和结束,因此很容易将光标更改为微调器。我在 fetch 中找不到类似的钩子(Hook)。除了在每个单独的 AJAX 调用中更改它之外,还有其他方法可以做到这一点吗?

大量的谷歌搜索一直在寻找关于...JQuery 的答案。

最佳答案

好了,我认为代码是不言自明的:

// Store a copy of the fetch function
var _oldFetch = fetch; 

// Create our new version of the fetch function
window.fetch = function(){

    // Create hooks
    var fetchStart = new Event( 'fetchStart', { 'view': document, 'bubbles': true, 'cancelable': false } );
    var fetchEnd = new Event( 'fetchEnd', { 'view': document, 'bubbles': true, 'cancelable': false } );

    // Pass the supplied arguments to the real fetch function
    var fetchCall = _oldFetch.apply(this, arguments);

    // Trigger the fetchStart event
    document.dispatchEvent(fetchStart);

    fetchCall.then(function(){
        // Trigger the fetchEnd event
        document.dispatchEvent(fetchEnd);
    }).catch(function(){
        // Trigger the fetchEnd event
        document.dispatchEvent(fetchEnd);
    });

    return fetchCall;
};

document.addEventListener('fetchStart', function() {
    console.log("Show spinner");
});

document.addEventListener('fetchEnd', function() {
    console.log("Hide spinner");
});

这是一个活生生的例子:https://jsfiddle.net/4fxfcp7g/4/

关于javascript - 使用 fetch API 时在 AJAX 调用期间显示微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43792026/

相关文章:

javascript - 强制链接在WebView而非浏览器中打开

javascript - 我如何捕获在我的容器 <div> 中点击了哪个数字 <div> 并将其存储在变量中

php - 如何使用ajax和jquery触发Mysql查询并生成动态 TreeView ?

jquery - 如何停止通过 $.get 发送的 jquery ajax 请求?

javascript - 如何上传二进制 blob

javascript - Fetch API 中的请求信号属性

javascript - 当我尝试运行 javascript 时,我发现一些警告,如何克服它

javascript - 将字符串附加到元素属性的末尾

javascript - 多个 JavaScript 颜色选择器

javascript - Fetch API Post 方法不起作用