0

関数内で設定している変数にアクセスしようとしています。関数の外でアクセスする必要があります。最初に関数の外で変数を設定してから、関数内から変数を変更しようとしましたが、うまくいかないようです。これが私のコードです:

location_var =""; //i've tried both location_var and var location_var here

$.getJSON('/v/js/round.js', function(data) {

    var location_var = "location.pathname.indexOf('/product-p/test-product.htm')"

        for(i=0; i<data.records.length-1; i++){     
            var location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
        }

});

console.log(location_var);

ログアウトすると、空の文字列が表示されます。JSON 関数内からログアウトすると、正しい値が得られます。基本的には、JSON ファイルをループして値を出力するだけです。

ここで答えが言ったことも試しました (グローバル値 (グローバル変数である必要はありません) を jQuery に保存する方法は? ) ですが、 $.getJSON.location_var として変数にアクセスしようとしましたが、どちらもうまくいきませんでした。

ご協力いただきありがとうございます!

4

2 に答える 2

3

コードには 2 つの問題があります。

まず第一に - のスコープlocation_varは内部関数です。:

var foo = 1;
(function(){
    var foo = 2;
})();
alert(foo); // alerts '1'

2 つ目varは、関数をスコープとする新しい変数を作成しますが、alertステートメントはfoo外側のスコープにアタッチされた変数を参照しています。

内部を削除することでこれを修正できますvarが、それはグローバルスコープを汚染する厄介な解決策であり、コードの別のバグのために機能しません:

getJSON呼び出しは非同期です。つまり、リモート リクエストが送信されてから他のコードが実行され、レスポンスが受信されるとコールバック関数が実行されます。つまり、値をログに記録した時点では、応答はまだ受信されていません。

の新しい値に依存するすべてのコードがlocation_varコールバックから呼び出されることを確認する必要があります。次に例を示します。

$.getJSON('/v/js/round.js', function(data) {
   ...code...
   console.log(location_var);
});
于 2013-09-10T00:36:12.243 に答える
0

これを試して:

$.getJSON('/v/js/round.js', function(data) {

    window.location_var = "location.pathname.indexOf('/product-p/test-product.htm')"

    for(i=0; i<data.records.length-1; i++){     
        location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
    }

    console.log(location_var);

});
于 2013-09-10T00:35:49.120 に答える