2014-10-22 3 views
0

Попытка получить изображение в base64 от веб-рабочего. Все отлично, за исключением того, работник ответив несколько раз .onmessage событие:Почему WebWorker несколько раз запускает событие сообщения?

enter image description here

main.js части:

var worker = new Worker('js/ww.js'); 
worker.onmessage = function(e) { 
    console.log(e); 
}; 
worker.postMessage({ url: '/api/aerial?x=159&y=94&zoom=8&base64=true' }); 

ww.js, WebWorker части:

var self = this; 

function makeRequest(url) { 
    var httpRequest = new XMLHttpRequest(); 

    if (!httpRequest) { 
     console.error('Giving up. Cannot create an XMLHTTP instance.'); 
     return false; 
    } 

    httpRequest.onreadystatechange = function() { 
     var response = httpRequest.responseText; 
     self.onMessage = postMessage(response); 
    }; 

    httpRequest.open('GET', url, true); 
    httpRequest.send(); 
} 

self.addEventListener('message', function(event) { 
    makeRequest(event.data.url); 
}); 

Почему это срабатывает несколько раз?

Возможно, это произошло из-за использования такого родного AJAX?

ответ

0

Проверьте правильность состояния и состояния запроса.
В вашем onreadystatechange -handler вы должны сделать следующее:

httpRequest.onreadystatechange = function() { 
    if (httpRequest.readyState == 4 && httpRequest.status == 200) { 
     var response = httpRequest.responseText; 
     self.onMessage = postMessage(response); 
    } 
} 
+0

спасибо! :) забыл об этом, долгое время не использовал простой AJAX, и теперь это необходимо, потому что jQuery нельзя загружать в экземпляр WebWorker, потому что у WebWorker нет объектов окна или документа –

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