- 締切済み
Javascriptグローバル変数の値引き継ぎ
Javascriptで関数関係なしに処理した値を引き継ぎたいのですが 可能でしょうか? 例: test = 0; //引き継ぎたい変数 function hoge(){ //処理 a = function(){ //処理 test = 1; } } hoge; alert(test); //「1」にしたい(関数内で処理した値を保持したい)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
じっさい非同期処理でデータを受けた後に処理をしたいのであれば xmlHttpRequest.onreadystatechange = function(){ if((xmlHttpRequest.readyState == 4 ) && ( xmlHttpRequest.status == 200 )){ test = 1; } } のような処理になると思います。 もちろん非同期なのでalertをかけたタイミングで想定のデータが取れるとは 限りません。
- yambejp
- ベストアンサー率51% (3827/7415)
>xmlHttpRequest.open( 'GET', requestUrl,true); requestUrlの指定がどうなっているのでしょうか? たとえばlocation.hrefを指定してあげて、 hoge()を実行すればいけるかもしれません <script> test = 0; function hoge(){ var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.onreadystatechange = function(){ test = 1; } xmlHttpRequest.open( 'GET', location.href,true); xmlHttpRequest.send( null ); } hoge(); document.write(test); </script>
補足
度々回答頂きましてありがとうございます requestUrlは外部APIのリクエストURLとなります。 こちらの関数内で、APIのレスポンスデータから判定してtestに1を代入したいと考えています。
- yambejp
- ベストアンサー率51% (3827/7415)
ユーザー関数hoge()内の無名関数でグローバル変数を書きかえるんですよね? 無名関数を実行しないとどうしようもないかと? aがローカルでしょりされるならこう <script> test = 0; function hoge(){ var a = function(){ test = 1; } a(); } hoge(); document.write(test); </script> aがグルーバルで処理されるならこう? <script> test = 0; function hoge(){ a = function(){ test = 1; } } hoge(); a(); document.write(test); </script>
補足
分かり辛い質問にご回答頂きありがとうございます。 下記の場合は可能でしょうか? 例2: test = 0; //引き継ぎたい変数 function hoge(){ //処理 var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest.onreadystatechange = function(){ //処理 test = 1; } xmlHttpRequest.open( 'GET', requestUrl,true); xmlHttpRequest.send( null ); } hoge; document.write(test);
お礼
タイミング次第ってことですよね。。 そもそも自作の非同期処理でAPIの取得内容によって、ページの内容を変えたり、他のJavascript(ブログパーツ等)を呼び出すことは難しそうですね。。 熱心にご回答頂きありがとうござました。