javascript - Hook 所有 Fetch Api AJAX 请求

标签 javascript ajax fetch-api

您将如何 Hook 所有使用 Fetch Api 的 AJAX 请求?以前我们可以做这样的事情来 Hook 所有 XMLHttpRequest:

(function() {
    var origOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function() {
      console.log('request started!');
      this.addEventListener('load', function() {
          console.log('request completed!');
          console.log(this.readyState); //will always be 4 (ajax is completed successfully)
          console.log(this.responseText); //whatever the response was
      });
      origOpen.apply(this, arguments);
    };
  })();

或者更好的是,如果您想添加到上述功能,您将如何 Hook 所有 Fetch Api 和所有 XMLHttpRequest AJAX 请求?

最佳答案

由于 promise 的性质,这很容易做到:

var taperFunction = response => response;
var originalFetch = fetch;
fetch = (input, init) => originalFetch(input, init)
    .then(response => new Promise((resolve) => {
        resolve(taperFunction(response));
    }));

还有一点更复杂(明确)的例子:

var originalFetch = fetch;
fetch = (input, init) => {
    debugger; // do what ever you want with request or reject it immediately
    return originalFetch(input, init).then(response => {
        // it is not important to create new Promise in ctor, we can await existing one, then wrap result into new one
        return new Promise((resolve) => {
            response.clone() // we can invoke `json()` only once, but clone do the trick
                .json()
                .then(json => {
                    debugger; // do what ever you want with response, even `resolve(new Response(body, options));`
                    resolve(response);
                });
        });
    });
};

关于javascript - Hook 所有 Fetch Api AJAX 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728723/

相关文章:

reactjs - 为什么在处理 Promise 对象时大括号会提供未定义的数据?

javascript - 如何对动态生成的文本框进行验证?

javascript - 有没有办法减少 ExtJS 的冗长

javascript - 处理未定义的ajax数据的替代方法

javascript - 为什么我的 ajax 调用失败

javascript - 如何检查获取的响应是否是javascript中的json对象

javascript - 每个循环内表单上的 Rails Ajax 具有嵌套资源和 html 类

php - 带有 IE 9 的 jQuery $.ajax POST 请求结果为空数组

javascript - jQuery DataTables - AJAX 调用正常工作,但数据未绘制成图表

javascript - 无法正确使用 fetch 在 S3 上放置文件