如何使用 JavaScript 从实时输出流中获取数据
How to fetch data from a live outputstream with JavaScript
实时输出流Link:https://wunder-provider.herokuapp.com/
我上面有一个实时输出流,它每 3 到 15 秒生成一次随机用户信息。我正在创建一个 React Native 应用程序,在屏幕上显示这些用户及其信息。
我的问题是从该输出流中获取数据。
当我尝试 fetch 方法时,它 returns 这个错误。
componentWillMount() {
fetch("https://wunder-provider.herokuapp.com/")
.then(res => res.json())
.then(res => console.log(JSON.stringify(res)))
}
错误:
Possible Unhandled Promise Rejection (id: 0):
SyntaxError: Unexpected token < in JSON at position 0
SyntaxError: Unexpected token < in JSON at position 0
at parse (<anonymous>)
at tryCallOne (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3747:14)
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3848:17
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28372:21
at _callTimer (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28261:9)
at _callImmediatesPass (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28297:9)
at Object.callImmediates (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28516:14)
at MessageQueue.__callImmediates (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3149:16)
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:2970:18
at MessageQueue.__guard (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3132:13)
如何从该源获取数据并添加到我的状态?
已解决!
constructor(props) {
super(props);
this.state = {
users: []
};
const ws = new WebSocket(
"wss://wunder-provider.herokuapp.com/socket.io/?EIO=3&transport=websocket"
);
ws.onopen = () => {
console.log("Opened.");
};
ws.onmessage = msg => {
if (msg.data.substr(0, 2) === "42") {
const stringToBeParsed = msg.data.substr(2);
const obj = JSON.parse(stringToBeParsed);
this.setState({ users: [...this.state.users, obj[1].results[0]] });
}
};
}
您正在尝试将 HTML 解析为 JSON。您请求的 url 正在提供一个 HTML 页面。您可以通过添加 console.log(res)
来验证这一点。输出将是 HTML.
Unexpected token <
错误是 <html>
标签
发布的回答说您正在尝试将 HTML 解析为 JSON 是正确的。如果您在“https://wunder-provider.herokuapp.com/”中打开开发人员工具并打开“网络”选项卡,您将能够看到请求。
其中一个请求 https://wunder-provider.herokuapp.com/ 将 HTML 作为其响应正文。这意味着当您对 URL 执行提取函数时,您将收到 HTML.
此外,如果我们仔细研究这些请求,您应该对其中一个特别感兴趣,那就是对 wss://wunder-[=21= 的请求]/URL。您可以做的是在您的 React Native 应用程序和服务器之间创建一个 websocket 连接并订阅 'userList' 频道。
实时输出流Link:https://wunder-provider.herokuapp.com/
我上面有一个实时输出流,它每 3 到 15 秒生成一次随机用户信息。我正在创建一个 React Native 应用程序,在屏幕上显示这些用户及其信息。
我的问题是从该输出流中获取数据。
当我尝试 fetch 方法时,它 returns 这个错误。
componentWillMount() {
fetch("https://wunder-provider.herokuapp.com/")
.then(res => res.json())
.then(res => console.log(JSON.stringify(res)))
}
错误:
Possible Unhandled Promise Rejection (id: 0):
SyntaxError: Unexpected token < in JSON at position 0
SyntaxError: Unexpected token < in JSON at position 0
at parse (<anonymous>)
at tryCallOne (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3747:14)
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3848:17
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28372:21
at _callTimer (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28261:9)
at _callImmediatesPass (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28297:9)
at Object.callImmediates (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:28516:14)
at MessageQueue.__callImmediates (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3149:16)
at blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:2970:18
at MessageQueue.__guard (blob:http://localhost:19001/6cf08556-7310-4c2d-b838-9a8fcadc2be1:3132:13)
如何从该源获取数据并添加到我的状态?
已解决!
constructor(props) {
super(props);
this.state = {
users: []
};
const ws = new WebSocket(
"wss://wunder-provider.herokuapp.com/socket.io/?EIO=3&transport=websocket"
);
ws.onopen = () => {
console.log("Opened.");
};
ws.onmessage = msg => {
if (msg.data.substr(0, 2) === "42") {
const stringToBeParsed = msg.data.substr(2);
const obj = JSON.parse(stringToBeParsed);
this.setState({ users: [...this.state.users, obj[1].results[0]] });
}
};
}
您正在尝试将 HTML 解析为 JSON。您请求的 url 正在提供一个 HTML 页面。您可以通过添加 console.log(res)
来验证这一点。输出将是 HTML.
Unexpected token <
错误是 <html>
标签
发布的回答说您正在尝试将 HTML 解析为 JSON 是正确的。如果您在“https://wunder-provider.herokuapp.com/”中打开开发人员工具并打开“网络”选项卡,您将能够看到请求。
其中一个请求 https://wunder-provider.herokuapp.com/ 将 HTML 作为其响应正文。这意味着当您对 URL 执行提取函数时,您将收到 HTML.
此外,如果我们仔细研究这些请求,您应该对其中一个特别感兴趣,那就是对 wss://wunder-[=21= 的请求]/URL。您可以做的是在您的 React Native 应用程序和服务器之间创建一个 websocket 连接并订阅 'userList' 频道。