问题描述
我正在开发一个项目,该项目需要在网络服务器上从 C++ 代码到 JavaScript 进行通信。目前,我已正确发送数据并且正在接收数据,但问题是我无法使用内部(onmessage)函数之外的数据。这仍然可以很好地覆盖网页元素,但是我尝试构建的图表无法获取实时数据。如果我将图表的代码放在内部函数中,整个程序就会冻结,我也无法从函数中取出变量以便在父函数中使用它。现在,我只想从内部函数中获取数据,以便我可以使用它。那么,有什么方法可以让我从内部函数中提取这些数据并在父函数中使用它吗?
这是我的代码:
{
var x;
var ws = new WebSocket('ws://localhost:10011/');
ws.onmessage = function(event)
{
x = event.data;
var testing = document.getElementById('InnerFunctionOutput');
testing.innerHTML = "Run Time: " + x;
}
var testing = document.getElementById('ParentFunctionOutput');
testing.innerHTML = "Run Time: " + x;
}
当我运行此代码时,内部函数的输出是恒定的数据流,而父函数的输出是常量 1。如果有人能帮我找到解决方案,将不胜感激。
另一种解决方案是将图表函数放在 websocket 函数中。这样,我就不必从函数中获取数据。然而,这个解决方案有其自身的一系列问题。如果您对该部分感兴趣,我将在下面放置一个链接到一个线程,在该线程中我会询问此替代解决方案。
任何帮助将不胜感激。
谢谢, 卢克
解决方法
我找到了解决问题的方法。为了从 websocket 函数中获取数据,我在页面上覆盖了一个文本元素,并简单地使该元素不可见。之后,只需阅读文本元素即可将其放入其余代码中。但是,可能有更好的方法来做到这一点,所以请让我知道是否有。
此外,我在使用此解决方案时遇到了一个问题。当我最初使用普通格式 document.getElementById('some id').innerHTML = some data;
尝试此操作时,它不起作用。但是当在开头添加“window”时 window.document.getElementById('some id').innerHTML = some data;
就可以了。