web-dev-qa-db-ja.com

HTML Web WorkerとJquery Ajax呼び出し

Web Workerファイル内でjQueryを使用できるかどうか疑問に思っています。 Google Chromeは、「Uncaught ReferenceError:$ is not defined」というエラーを表示します。

コードは次のとおりです。親ファイル:

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

    }
  });
}

助けてください、ありがとう:)

39
Tri

いいえcannot非スレッドセーフコンポーネントまたはDOMへのアクセスはなく、シリアル化されたオブジェクトを介して特定のデータをスレッドに受け渡しする必要があります。したがって、コードに問題を引き起こすには本当に一生懸命働く必要があります。 jQueryはJavaScript DOMライブラリです

ただし、ワーカーでネイティブXMLHttpRequestを使用できます。

また、外部スクリプトのインポートはscriptタグのあるページを経由しません:ワーカーファイルの場合は importScripts() を使用します。

38
Caspar Kleijne

ここに私が見つけたものがあります:

importScripts()関数を使用して、外部スクリプトファイルまたはライブラリをワーカーにロードできます。

http://www.html5rocks.com/en/tutorials/workers/basics/#toc-enviornment-loadingscripts

importScripts('script1.js');
importScripts('script2.js');

または

importScripts('script1.js', 'script2.js');

ただし、jQueryにはWebワーカーにはないDOMアクセスが必要なため、jQueryをロードすることはできません。

24
Sherzod

Webワーカーは外部ファイルにあるため、次のJavaScriptオブジェクトにアクセスできません。

  • ウィンドウオブジェクト
  • ドキュメントオブジェクト
  • 親オブジェクト

したがって、ワーカーファイル内では$を使用できません。従来のAJAXこのようなものを使用できます

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

http://www.w3schools.com/html/html5_webworkers.asp の参照

4
user1968960

jQueryは、主にDOMとWebページを操作するためのものです。したがって、DOMにアクセスできないWeb Workersにはあまり適していません。

nderscore.js などのDOMライブラリの代わりにユーティリティライブラリを使用するか、DOM操作を一切行わないjQueryの軽量バージョンであるjQuery Workerライブラリを作成する必要がある場合があります。機能性、ユーティリティ機能のみを保持します。

2
Fred

Node.JSの実行環境には、ネイティブDOM実装もありません。 Node.JSとHTML5 Web Workersは特定の制限を共有していると言ってもいいと思います。

Node.JSでjQueryを使用する目的でDOM実装をシミュレートする方法があります。それでもWeb WorkersでjQueryを使用する場合は、Node.JSソリューションを検索して、それらが適用されるかどうかを確認する必要があると思います。

2
jokeyrhyme

このプラグインをご覧ください https://github.com/rwldrn/jquery-Hive

1
Alexandre