2011-01-29 79 views
38

我想知道如果我可以在web工作人員文件中使用jQuery。谷歌瀏覽器給我這個錯誤:「未捕獲ReferenceError:$未定義」。HTML Web工作者和jQuery的Ajax調用

下面是代碼: 父文件:

var loader = new Worker(BASE_URL + "js/rss_loader_worker.js"); 
// Ask the worker to start loading the RSS from the server 
loader.postMessage("loadRss"); 
// When receive the response from the server 
loader.onmessage = function (event) { 
    console.log(event.data); 
} 

工人文件:

onmessage = function (event) { 
    if (event.data === "loadRss") { 
    loadRss(); 
    } 
} 

/** 
* This function handles the AJAX request to the server side 
* then pass the content to the view page 
* @param none 
* @return html text 
*/ 
loadRss = function() { 
    $.ajax({ 
    data: {city: CITY_LOCATION}, 
    url: BASE_URL + "/getfeeds", 
    onsucess: function (data) { 

    } 
    }); 
} 

請幫幫忙,謝謝:)

+0

importScripts( 「的jquery.js」)使用傳統的AJAX這樣的事情

if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } 

參考;無法工作:jQuery使用「窗口」變量,這是網絡工作者無法訪問的。 但是您可以使用其他庫來完成這項工作=) – 2012-02-23 10:19:42

+0

要明確入站搜索者,通過「Worker」運行ajax請求是可能的,而且通常也是有益的。由於`jQuery`是一個DOM操作庫,而Web Workers具有一個`WorkerGlobalScope`而不是`Window`,因此不能訪問文檔或DOM,所以與傳統的`jQuery`不同。 – buley 2014-04-01 23:32:15

回答

37

不,你不能。無法訪問非線程安全組件或DOM,並且必須通過序列化對象將特定數據傳入和傳出線程。所以你必須非常努力地在你的代碼中導致問題。 jQuery是一個JavaScript DOM庫

但是,您可以在工作人員中使用原生XMLHttpRequest

而且,導入外部腳本不會通過帶script標記的頁面進行:使用importScripts()作爲工作程序文件中的腳本。

+0

好的,謝謝你的幫助。現在很清楚。我會找到另一種方式。 – Tri 2011-01-29 19:22:59

2

Node.JS中的執行環境也缺少本地DOM實現。我認爲Node.JS和HTML5 Web Workers共享某些限制是公平的。

爲了在Node.JS中使用jQuery,有許多方法可以模擬DOM實現。如果您仍然想在Web Workers中使用jQuery,我認爲您應該搜索Node.JS解決方案並查看它們是否適用。

1

承擔這個看看插件https://github.com/rwldrn/jquery-hive

+0

jQuery配置單元是在jQuery中使用web工作的抽象,而不是其他方式 – thomaux 2012-03-23 08:15:05

+0

此插件現在已過時。它的界面與您在當前jQ中使用的界面不同。 – Samuel 2012-10-31 13:04:44

2

jQuery主要用於處理DOM和使用網頁。所以它不適用於無法訪問DOM的Web Workers。

您可能需要使用一個實用程序庫,而不是一個DOM庫,如underscore.js,或者也許有人應該讓一個jQuery工人圖書館,剝離下來的jQuery的輕型版本沒有所有的DOM操作功能,只需保持實用功能。