如何在JS中实时发送api请求?

时间:2019-11-18 05:02:38

标签: javascript xmlhttprequest

使用此XHR请求,它只会发送一次请求,如果使用setTimeout完成,它可以重复发送请求,但是如何实时进行呢?像在某些网站上一样,我们可以看到实时比特币价格。我读到有关EventSource的信息,但不了解其用法。

var xhr = new XMLHttpRequest()
    xhr.onload = function(){
        if(this.status == 200){
        document.write(this.responseText)'
        }
     }
        xhr.open("GET","https://api.coindesk.com/v1/bpi/currentprice/USD.json",true);
        xhr.send();  

2 个答案:

答案 0 :(得分:0)

使用XHR,您可以通过setTimeout或setInterval进行Pull模拟,但是如果要获得更多即时响应,则必须设置WebSocket服务器。

并非所有浏览器都支持websocket,因此您必须回退到“超时/间隔”拉取。

类似于XHR对象,WebSocket对象定义onopen,onmessage和onerror回调。

答案 1 :(得分:0)

要通过EventSource获取数据,您需要有一台实现SSE的服务器

  

服务器发送事件(SSE)是一项规范,它允许服务器将事件直接发送到订阅这些事件的客户端,类似于WebSockets和相关的服务器到客户端推送技术。

ShoppingCart的实现类似于以下内容(请看this链接):

Receipt

如果事件生成器脚本位于其他来源,则应使用URL和选项字典创建新的EventSource对象。

var evtSource = new EventSource('sse.php');
var eventList = document.querySelector('ul');

evtSource.onmessage = function(e) {
  var newElement = document.createElement("li");

  newElement.textContent = "message: " + e.data;
  eventList.appendChild(newElement);
}

在这种情况下,您拥有REST API,而不是SSE,因此,获得实时信息的最佳方法是使用EventSource函数每隔n个时间段重复Ajax调用