如何从Web worker中访问对象元素数据?

时间:2013-12-09 16:08:20

标签: javascript xml json object web-worker

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

目前我有一个ajax调用,它返回一个包含多个数据块的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”&amp; “sub3”数据。

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

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

最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

确定,

我想这里学到的教训从来都不是假设的。

当我这样做时: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);

这样我就不需要解析任何东西,因为worker可以接受数组(仅在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;

   }

};

现在我可以访问数据,我可以在循环中执行我喜欢的操作,这样我就可以在浏览器中释放一些处理时间。

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