2013-12-09 75 views
1

我目前正在瞭解網絡工作人員,我需要在工作人員中做一些計算,以防止瀏覽器中出現流量。如何訪問web worker內的對象元素數據?

目前我有一個AJAX調用,它返回一個包含這樣的多個數據塊的XML數據結構:

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

我然後從該數據結構中創建一個對象,像這樣:

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

我然後將對象轉化爲工人,如下所示:

var toPass = JSON.stringify(node); 

I n這個變量(toPass)發送到工人,像這樣:

worker.postMessage(toPass); 

到目前爲止,這一切工作正常,這個問題我已經試圖工人中訪問數據。

所以在工人我這樣做:

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]」中的數據元素嗎?

最好的問候。

+0

'$(xml).find(「data」)' - 你真的想從jQuery結果中創建一個JSON對象嗎?我很驚訝,這是有效的。無論如何,當它在web worker中重組時,肯定不會是jQuery對象。 – Pointy

+0

也許我在這裏完全錯了,但是當我console.log(節點)我得到的「[對象對象]」其長度匹配「」標籤的數量,所以我認爲結構看起來像**節點[0] = {sub1:data,sub2:data,sub3:data} ** – user1005240

+1

是的,但是像.find()這樣的東西不能工作,因爲你不能使用JSON編碼函數。換句話說,如果它傳遞給網絡工作者,那麼就沒有jQuery代碼了。 – Pointy

回答

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); 

這樣,我並不需要解析什麼是工人可以接受陣列(只有在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; 

    } 

}; 

現在,我有訪​​問數據時,我能做些什麼,我用它喜歡裏面的循環允許我在瀏覽器中釋放一些處理時間。

現在我只需要處理它並找出如何返回它。