javascript - 如何从网络 worker 内部访问对象元素数据?

标签 javascript xml json object web-worker

我目前正在学习网络工作人员,我需要在工作人员中进行一些计算,这不会阻碍浏览器中的流程。

目前我有一个 ajax 调用,它返回一个包含多个数据 block 的 xml 数据结构,如下所示:

<data>
   <sub1>
   <sub2>
   <sub3>
</data>
<data>
   <sub1>
   <sub2>
   <sub3>
</data>

然后我从这个数据结构创建一个对象,如下所示:

var node = $(xml).find(data);

然后我将对象字符串化以传输给工作人员,如下所示:

var toPass = JSON.stringify(node);

然后我将此变量 (toPass) 发送给工作人员,如下所示:

worker.postMessage(toPass);

到目前为止,所有这些工作正常,我遇到的问题是尝试访问工作人员内的数据。

所以在 worker 中我这样做:

onmessage = function (oEvent) {

   var node = JSON.parse(oEvent.data);

   for(var  = 0; i < node.length; i++){

               var sub1 = node[i].find('sub1').text();         

   }    

};

我面临的问题是尝试访问“sub1”、“sub2”和“sub3”数据。

我可以看到我正在尝试错误地访问数据,因为我使用的是 XML.find 方法, 我觉得在将数据解析为 JSON 对象后,我对数据感到困惑。

有人可以告诉我如何正确访问“node[i]”中的数据元素吗?

最诚挚的问候。

最佳答案

好的,

我想这里学到的教训是永远不要假设任何事情。

当我这样做时: var node = $(xml).find('data'); 我认为它返回了一个对象数组,其中包含每个标签内的所有子标签,但是我错了,我返回了一个数组(长度正确),但每个数组都包含空对象,这就是为什么我无法访问网络工作人员中的数据。

为了解决这个问题,在我将数据请求发送给工作人员之前,我首先像这样循环 xml 文件:

var node = $(xml).find('data');

var nodeArray = [];

for (var i=0; i<node.length; i++){  

    var sub1    = $(node[i]).find('sub1').text();
    var sub2    = $(node[i]).find('sub2').text();
    var sub3    = $(node[i]).find('sub3').text();


    var tojsonObj = {'sub1':sub1,'sub2':sub2,'sub3':sub3};

    nodeArray.push(tojsonObj);              
}

worker.postMessage(nodeArray);

这样我不需要解析任何东西,因为工作人员可以接受数组(仅在 ff 中测试)

要在工作人员中访问所有这些数据,我这样做:

onmessage = function (oEvent) {

var nodeArray = oEvent.data;



   for(var i = 0; i < nodeArray.length; i++){

       var sub1     = nodeArray[i].sub1;
       var sub2     = nodeArray[i].sub2;
       var sub3     = nodeArray[i].sub3;

   }

};

现在我可以访问数据了,我可以在循环内用它做我喜欢做的事情,这样我就可以在浏览器中释放一些处理时间。

现在我只需要处理它并弄清楚如何返回它。

关于javascript - 如何从网络 worker 内部访问对象元素数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20475133/

相关文章:

java - 发送 POST 请求或尝试更新时出现 org.springframework.http.converter.HttpMessageNotReadableException

javascript - sails.js 一对多关系——变量所有者集合属性

javascript - 如何从 MongoDB 中提取项目并在输入新项目时更新它们?

javascript - jquery 单击链接

java - JAX-B 嵌套列表

arrays - 尝试从 SwiftUI View 中的嵌套数组调用

jquery - 解析 ASP.Net 中的 JSON 对象数组

javascript - 具有 ID 的 DOM 树元素是否成为全局属性?

c# - 将 Xml 反序列化为 List<T> - xmlns ='' 不是预期的

c# - 将难以形成的 XML 反序列化为 C# 对象