1

ケース 1:このように変数を外部 js ファイルに渡しました

<script type="text/javascript">

var data1, data2, data3, data4;

function plotGraph() {
    var oHead1 = document.getElementsByTagName('HEAD').item(0);
    var paramScript = document.createElement("script");
    paramScript.type = "text/javascript";
    paramScript.setAttribute('data1', data1);
    paramScript.setAttribute('data2', data2);
    paramScript.setAttribute('data3', data3);
    paramScript.setAttribute('data4', data4);
    oHead1.appendChild(paramScript);
    var oHead = document.getElementsByTagName('HEAD').item(0);
    var oScript = document.createElement("script");
    oScript.type = "text/javascript";
    oScript.src = "js/graph.js";
    oHead.appendChild(oScript);
}
</script>

ケース 2: jquery を使用してこのように渡してみました

<script type="text/javascript">   

    function plotGraph() {
        var data1, data2, data3, data4;
        $.getScript("js/graph.js");
    }
</script>

最初のケースでは機能していますが、グローバル変数を作成する必要がありました…これは必要ありません…</p>

2番目のケースでは、jsファイルで認識されないローカル変数があります..

どうすればいいですか?助言がありますか?

4

2 に答える 2

6

変数は、次の場合にのみ、個別のスクリプト間で共有できます。

  1. グローバル変数
  2. それらが何らかの形で同じコンテキストにある場合(複数の外部スクリプトでは難しい)
  3. 変数へのアクセスを返す関数を 1 つのモジュールで提供する場合。
  4. 他のスクリプトを呼び出して、変数または変数への参照を他のスクリプトに渡す場合。

編集: OPが実際に何をしようとしているのか(外部スクリプト内の関数へのajax呼び出しからデータを通信する)を説明したので、この問題に対する本当の答えは次のとおりです。

外部スクリプトで ajax 呼び出しの成功ハンドラーからグローバル関数を呼び出し、これらのデータ要素をその関数に渡す必要があります。外部スクリプトの関数は、すぐにデータに作用するか、後で使用するために独自の変数にデータを保存できます。


参考までに:$.getScript()グローバル レベルでスクリプトを読み込みます。そのため、ケース 2 は機能しません。

変数のグループへのアクセスを共有する 1 つの方法は、それらをすべてオブジェクトのプロパティとして配置し、そのオブジェクトをグローバルにするか、そのオブジェクトへのアクセスを取得するグローバル関数を提供することです。たとえば、多数のプロパティを持つ 1 つのグローバル オブジェクトを宣言できます。

var myConfigObject = {
    data1: value1,
    data2: value2,
    data3: value3,
    data4: value4
};

外部スクリプト ファイルで関数を呼び出すには、次のようにします。

  1. 外部スクリプト ファイルで、グローバルにアクセス可能な関数を定義します。それを呼びましょうdoIt(a, b, c, d)- 4 つの引数を持つ関数です。
  2. 次に、使用可能なデータ値がある ajax 呼び出しで、必要なデータ値を呼び出しdoIt()て渡すだけですdoIt(3, "foo", data4, whatever)
  3. 次に、 の実装でdoIt(a, b, c, d)、渡された 4 つのデータ値を使用できます。

したがって、外部ファイルには次のようになります。

function doIt(a, b, c, d) {
    // do whatever doIt wants to do
    // use the arguments passed to this function
}

メインの index.html ファイルには、ajax 呼び出しがあります。

$.ajax(..., function(data) {
    // process the returned data from the ajax call
    // call doIt
    doIt(3, "foo", data4, whatever);

});
于 2012-07-20T07:01:58.580 に答える
3

などを行うあなたのコードparamScript.setAttribute('data1', data1);は不要です。これは、スニペットが生成する HTML が次のようになることを意味します。<script type="text/javascript" data1="data1" data2="data2"...

グローバル変数は本当にあなたのオプションだと思います。ただし、代わりにグローバル名前空間を作成できます。

var scriptParams = {};
scriptParams.data1 = 'data1';
scriptParams.data2 = 'data2';

など。グローバルスコープのトップレベルにオブジェクトが1つしかないため、これはよりクリーンになります。

于 2012-07-20T07:11:41.967 に答える