2017-02-01 45 views
1

この変数を関数外で呼び出そうとしていますが、結果として定義されません。 varなしで変数がグローバルスコープで呼び出すことができますが、私は未定義と理解します。私はまた、関数の外にvarを設定して呼び出しましたが、それも成功しませんでした。ここに私の単純化されたコードだありがとう:)関数内のvarを関数外に呼び出す

function function1() { 
    $.getJSON('random.json') 
    .success(successfunction) 
    .error(failfunction); 

    function successfunction(data) { 
    testvar = (data.name); 
    } 
    function failfunction(error) { 
    console.log(error); 
    } 
}; 

console.log(testvar); 

は、Ajaxの負荷後のVARをロードするために $(document).ajaxStop(function() {} を使用。

+0

「function1」はどこにありますか? –

+0

@ChristianZosel私は 'function2'でいくつかの数学演算を行いdiv内に出力します – Enkhtuvshin

答えて

1

あなたはそれがグローバルになっていることを確認してくださいます。 AJAX呼び出しが成功した場合にのみ、タイムアウト&後に実行されている:


ただし、successfunctionが、後に実行されますコールバックであることに注意してください。

+0

'console.log(testvar);で試しました;' testvarが定義されていません。 'にconsole.log(windows.testvar)と ;'私は未定義取得しています:( 編集:私は機能 – Enkhtuvshin

+0

以内にそれを呼び出すあなたが全体の答えを読んでなかった場合、はい私はJSONからデータを取得することができますがディディのu?最後のメモを読もうとしているのですか? –

+0

はい、私は全部のアイデアを得ることができません。私は初心者です。 – Enkhtuvshin

1

試しSUC cessfunctionに戻りtestvarを追加する代わりにtestvar

コールsuccessfunction

function successfunction(data){ 
    testvar = "var"; 
    return testvar; 
} 
2

それは法の適用範囲にだけ見えるのですが呼び出し、あなたはグローバルを意味している(関数外で宣言する必要がこの場合)または関数呼び出しでそれを返す:

var testvar2 = "var 2"; 
 

 
function function1() { 
 
    // parse json 
 
    return successfunction("data"); 
 

 
    function successfunction(data) { 
 
    testvar2 = "var glob"; 
 
    var testvar = "var ret"; 
 
    return testvar; 
 
    } 
 
    function failfunction(error) { 
 
    console.log(error); 
 
    } 
 
}; 
 

 
console.log(testvar2); 
 
console.log(function1()); 
 
console.log(testvar2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

グローバル変数を宣言することは避け、適切な方法ではないため、可能な限り小さな変数の範囲を定義してみてください。他のjsモジュールでも、testvar2という名前のvaribaleが宣言されていると面白いことが起こります。あなたはグローバルスコープが、そのことでwindow

function successfunction(data){ 
    window.testvar = "var"; 
} 

のようにグローバルオブジェクトへのあなたの変数を添付したい場合

+0

スニペットは' test var is not defined'と言っていますが、私も同じ結果を得ています – Enkhtuvshin

+0

'var 2 '、ページをリロードしてください。 – ppasler

+0

はい、申し訳ありませんが、私は 'var'を取得しようとしています。私はあなたが文書の上にそれを宣言していると思うので、とにかくそれを得るでしょうか?それとも私には見えないものがありますか? (申し訳ありません私は学んでいます) – Enkhtuvshin

関連する問題