【问题标题】:How to get active aurelia fetch ajax calls count如何获得活跃的 aurelia 获取 ajax 调用计数
【发布时间】:2017-03-23 05:32:04
【问题描述】:

当站点使用 jquery/XMLhttp 请求时,我们能够使用 jQuery.active 在后端获得活动的 ajax 调用。但是当网站使用 aurelia fetch 进行 ajax 调用时,如何在后端获取活动的 fetch 调用数?

【问题讨论】:

    标签: aurelia


    【解决方案1】:

    我的fetch 调用有一个包装器,它在每次调用之前递增一个变量,然后在.then 代码块中减少它。这似乎运作良好。

    示例代码:

    getData(url) {
      // Http Fetch Client to retreive data (GET)
      this.apiCalls += 1;
      console.log("getData from API: " + url);
      return this.httpClient.fetch(url, {
        credentials: 'include'
      }).then(response => {
        this.apiCalls -= 1;
        if (!response.ok) {
          throw Error(response.statusText);
        }
        return response.json();
      }).catch(error => {
        this.apiCalls -= 1;
        console.log(error);
        return null;
      });
    }
    

    【讨论】:

    • 你能分享一下吗?实际上,我正在尝试在 aurelia 网站上的 selenium 中使用它。但我无法在后端处理 Fetch 请求。尝试通过将 javascript 代码注入站点但无法获取 aurelia fetch ajax 计数。
    • 当然。我刚刚更新了我的回复。因此,我的所有页面都没有直接调用 fetch ,而是调用这个 getData() 例程,它进行调用并通过将响应转换为 json 进行一些预处理(特定于我的上下文,可能对你没有帮助)。您可以随时检查apiCalls 以查看有多少呼叫处于活动状态。我有另一个类似布局的postData() 并行例程。
    • 谢谢斯塔基。在我的组织中,开发团队还没有准备好添加包装器,是否有任何其他解决方法可以帮助在页面级别注入一些脚本并找到任何活动的提取调用/请求。使用 XMLHTTP 请求使用此代码注入站点。
    • (function() { var oldOpen = XMLHttpRequest.prototype.open; window.openHTTPs = 0; XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { window.openHTTPs++ ; this.addEventListener("readystatechange", function() { if(this.readyState == 4) { window.openHTTPs--; } }, false); oldOpen.call(this, method, url, async, user, pass ); } })(XMLHttpRequest);
    • 我们是否也可以为获取请求执行类似的方法,以便在浏览器控制台中的任何时间点都可以获取正在处理的请求计数。
    【解决方案2】:

    我通过创建一个单例/全局值然后使用interceptors 配置客户端来完成此操作。在那里,您可以挂钩您的所有请求/响应。在那里修改单例,并将单例导入到需要它的任何视图模型中。 fetch-client 和 httpclient 都支持这个。

    let client = new HttpClient();
    client.configure(x => {
        x.withInterceptor({
          request(message) {
            singleton.activeConnections++;
            return message;
          },
    
          response(message) {
            singleton.activeConnections--;
            return message;
          }
        });
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多