Javascript 获取事件处理程序不起作用

标签 javascript event-handling addeventlistener fetch-api

我有一个问题。

如何调度 fetch 的事件?

在我的代码中,我添加了 addEventListener,但我不知道为什么它不起作用。

html

<button id="btn">Button</button>

Javascript

var btn = document.getElementById('btn');

window.addEventListener('fetch', function (event) {
    console.log("fetch add event listener");
});

btn.addEventListener('click', function (event) {
    fetch('https://httpbin.org/get')
      .then(data => {console.log(data)})
});

Codepen 链接

http://codepen.io/cnaa97/pen/JEogrr

请告诉我该怎么做。

下面是 MDN 引用链接。

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Response_objects

最佳答案

我建议你使用javascript Promise,因为它处理响应更加灵活和高效。请查看我为您创建的 jsfiddle https://jsfiddle.net/8j8uwcy7/

HTML

<button id="btn">Button</button>

JavaScript

var btn = document.getElementById('btn');

function fetch(url) {
  // Return a new promise.
  return new Promise(function(resolve, reject) {
     console.log("fetch add event listener");
    // Do the usual XHR stuff
    var req = new XMLHttpRequest();
    req.open('GET', url);

    req.onload = function() {
      // This is called even on 404 etc
      // so check the status
      if (req.status == 200) {
        // Resolve the promise with the response text3

        resolve(req.response);
      }
      else {
        // Otherwise reject with the status text
        // which will hopefully be a meaningful error
        reject(Error(req.statusText));
      }
    };

    // Handle network errors
    req.onerror = function() {
      reject(Error("Network Error"));
    };

    // Make the request
    req.send();
  });
}

btn.addEventListener('click', function (event) {
   fetch('https://httpbin.org/get').then(function(response) {
     console.log("Success!", response);
     }, function(error) {
       console.error("Failed!", error);
     })   
});

打开浏览器控制台并查看响应。您现在可以从 API 中提取必要的数据。

关于Javascript 获取事件处理程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500982/

相关文章:

javascript - Nodejs 模块在不同设备中无法按预期工作

java - 使用 Spring @TransactionalEventListener 发布事件时的奇怪(循环)行为

javascript - 如何为可调整大小的 jQuery UI 元素启动调整大小功能(触发句柄拖动)

canvas - 在 Canvas 上获取鼠标点击事件

javascript - 添加事件监听器的多个功能

javascript - 主干模型已保存,但向 HTTP 发送空数组

javascript - 重构 Lodash 代码

javascript - 事件触发后的执行顺序

javascript - AddEventListener 在一个对象中

javascript - 使用 JavaScript 更改 CSS 图像过滤器的 HTML Range 元素