我目前正在学习网络工作者,我需要在不会阻碍浏览器流程的工作人员中进行一些计算。
目前我有一个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]”中的数据元素吗?
最诚挚的问候。
答案 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;
}
};
现在我可以访问数据,我可以在循环中执行我喜欢的操作,这样我就可以在浏览器中释放一些处理时间。
现在我只需要处理它并弄清楚如何返回它。