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

Javascript 如何在JS中实时发送api请求?,javascript,xmlhttprequest,Javascript,Xmlhttprequest,对于这个XHR请求,它只发送一次请求,如果使用setTimeout完成,它可以重复发送请求,但如何实时发送呢?就像在一些网站上一样,我们可以看到比特币的实时价格。我读过关于EventSource的文章,但不明白它是如何使用的 var xhr = new XMLHttpRequest() xhr.onload = function(){ if(this.status == 200){ document.write(this.responseText)'

对于这个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();  

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

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


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

使用XHR,您可以使用Pull by setTimeout或setInterval进行模拟,但如果您需要更即时的响应,则必须设置WebSocket服务器

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


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

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

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

EventSource
的实现如下所示(查看链接):

var-evtSource=neweventsource('sse.php');
var eventList=document.querySelector('ul');
evtSource.onmessage=函数(e){
var newElement=document.createElement(“li”);
newElement.textContent=“消息:”+e.data;
appendChild(新元素);
}
如果事件生成器脚本托管在不同的源上,则应使用URL和选项字典创建一个新的
EventSource
对象

const evtSource=new EventSource(“//api.example.com/ssedemo.php”,{withCredentials:true});


在这种情况下,您使用的是REST API,而不是SSE,因此,要获得实时信息,您最好使用
setTimeout
函数每隔n个时间段重复Ajax调用。

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

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

EventSource
的实现如下所示(查看链接):

var-evtSource=neweventsource('sse.php');
var eventList=document.querySelector('ul');
evtSource.onmessage=函数(e){
var newElement=document.createElement(“li”);
newElement.textContent=“消息:”+e.data;
appendChild(新元素);
}
如果事件生成器脚本托管在不同的源上,则应使用URL和选项字典创建一个新的
EventSource
对象

const evtSource=new EventSource(“//api.example.com/ssedemo.php”,{withCredentials:true});


在本例中,您使用的是REST API,而不是SSE,因此,要获得实时信息,您最好使用
setTimeout
函数每隔n个时间段重复Ajax调用。

有两种方法可以获取实时数据。1) 使用套接字2)池化AJAX调用。每1秒或每2秒设置一次间隔,这取决于应用程序,您可以调用它来集成最好的内容。顺便说一句,您不想做
文档。编写
。。。曾经特别是在异步环境中callback@Bravo为什么不
文档。写
?还有艾尔塞多姆的操纵。。。如果我没有记错的话,document.write in asynch callback将重写文档,因此擦除页面-我可能错了(虽然不经常发生)应该使用什么替代方法?有两种方法可以获取实时数据。1) 使用套接字2)池化AJAX调用。每1秒或每2秒设置一次间隔,这取决于应用程序,您可以调用它来集成最好的内容。顺便说一句,您不想做
文档。编写
。。。曾经特别是在异步环境中callback@Bravo为什么不
文档。写
?还有艾尔塞多姆的操纵。。。document.write in asynch callback将在我没有记错的情况下写入文档,因此擦除页面-我可能错了(虽然不经常发生)应该使用什么来代替?对于EventSource,我们需要访问服务器吗?不一定。如果事件生成器脚本位于不同的原点,则可以使用URL和选项字典创建EventSource对象。我将编辑我的答案并添加它。对于EventSource,我们是否需要访问服务器?不一定。如果事件生成器脚本位于不同的原点,则可以使用URL和选项字典创建EventSource对象。我将编辑我的答案并添加它。