2011-08-07 4 views
1

Javascriptの変数スコープと混同しています。 Prototypeライブラリを使ってデータファイル(.json)を読み込み、json-sans-evalを使ってレスポンステキストを解析しようとしています。問題は、私がAjax.Requestスコープ外の "dataObj"にアクセスしようとすると、データファイルの内容が失われているように思えることです。Javascript可変スコープの質問

Javascriptの変数には参照カウントがあります。私は、グローバル変数 'dataObj'がどのようにデータを失うのか理解していません。ヒントや助け?

ありがとうございました!

var dataObj; 
function OnLoadHandle() { 
    new Ajax.Request('data.json', 
    { 
     method:'get', 
     onSuccess: function(transport) 
     { 
      var response = transport.responseText || "no response text"; 
      dataObj = jsonParse(response); 
      console.log(dataObj["[0,0]"]); // OK 
     }, 
     onFailure: function(){ alert('Something went wrong...') } 
    }); 
    console.log(dataObj["[0,0]"]); // ERROR 
} 
+5

これはスコープではなく、_A_jaxが_A_synchronousで、2番目の 'console.log'が実行されている*前にリクエストが完了しています... – CMS

答えて

6

直ちにOnLoadHandleランの終わりにconsole.log(...)の2番目の呼び出し、要求が完了した後にのみonSuccessラン内部1に対し。 2番目のconsole.logは意味がありません。

もっと広く言えば、これはグローバル変数を作成する際に意味がないことを意味します。 onSuccessに割り当てられた後にのみ有効で、onSuccessのローカル変数としてスコープする必要があります。それ以外の場所に置く必要がある場合は、onSuccessが他の機能のパラメータとして渡されます。

+0

ありがとうございました。 – Unagi