2013-12-09 2 views
1

В настоящее время я изучаю веб-работников, и мне нужно сделать некоторые вычисления в рабочем месте, которые не будут поддерживать поток в браузере.Как получить доступ к данным элемента элемента из веб-рабочего?

В настоящее время у меня есть вызов Ajax, который возвращает структуру XML-данных, содержащий множество блоков данных, как это:

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

Я затем создать объект из этой структуры данных, как так:

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

I затем строит объект для передачи работнику следующим образом:

var toPass = JSON.stringify(node); 

I п отправить эту переменную (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", & данных "sub3" "SUB2".

Я вижу, что я пытаюсь получить доступ к данным некорректно, поскольку я использую подход XML.find, Я чувствую, что я запутываю данные после того, как он был разобран на объект JSON.

Может ли кто-нибудь показать мне, как правильно обращаться к элементам данных в «узле [i]»?

С наилучшими пожеланиями.

+0

Этот '$ (xml) .find (" data ")' - вы действительно пытаетесь создать объект JSON из результата jQuery? Я поражен тем, что это работает.В любом случае, это конечно не будет объектом jQuery, когда он будет восстановлен в веб-работнике. – Pointy

+0

Возможно, я совершенно не прав здесь, но когда я console.log (node), я получаю «объект объекта», из которого его длина соответствует количеству тегов «», поэтому я думал, что структура выглядит как ** node [0] = {sub1: data, sub2: data, sub3: data} ** – user1005240

+1

Да, но такие вещи, как «.find()», не могут работать, потому что вы не можете использовать функции JSON-encode. Другими словами, если он перейдет к веб-рабочему, больше нет кода jQuery. – Pointy

ответ

1

Ok,

Я предполагаю, что урок здесь никогда ничего не предполагаю.

Когда я это сделал: 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); 

Таким образом, мне не нужно, чтобы разобрать что-либо, как работник может принимать массивы (тестировал только в фф)

Чтобы получить доступ ко всем эти данные затем в течение рабочего я делаю это:

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; 

    } 

}; 

Теперь, когда у меня есть доступ к данным, я могу делать то, что мне нравится с ним внутри который позволяет мне освободить некоторое время обработки в браузере.

Теперь мне просто нужно обработать его и выяснить, как его вернуть.

Смежные вопросы