次のようなグローバル変数があります。
var socket_x = 'whatever';
「x」はユーザーセッションに依存するということです。ユーザーIDが123であるとしましょう。グローバル変数は、次のようになります。
var socket_123 = 'whatever';
このように、ブラウジングする各ユーザーは、グローバル変数として設定された独自のソケットを持ちます。
私はこれを行う方法がわかりません。
私は使用できることを知っています:
eval('socket_' + userId) = 'whatever'; //not recommended
window['socket_' + userId] = 'whatever'; //best
しかし、このようにグローバル変数を宣言したい場合、それは機能しません:
var eval('socket_' + userId) = 'whatever';
誰かがこれで私を助けることができますか?
ありがとうございました。
PS:これには「eval」を使用すべきではないことは知っていますが、これは説明のためだけのものです。
編集:
みなさん、お答えいただきありがとうございますが、うまくいきません。
これは私のグローバル変数についてこれまでに持っているものです(それはそのまま動作しますが、phpとjavascriptを混ぜたくありません):
var socket_<?php echo $_SESSION['user_id'];?> = io.connect( 'http://pubsub.pubnub.com', pubnub_setup_private );
あなたが提案するように、私が代わりにこれを行う場合:
window['socket_'+actual_user_id]= io.connect( 'http://pubsub.pubnub.com', pubnub_setup_private );
それはうまくいきません。
これをローカル変数として実行すると、次のように機能します。
eval('socket_'+actual_user_id).emit( 'all', msg_all );
しかし、私がそうする場合、それはしません:
window['socket_'+actual_user_id].emit( 'all', msg_all );
だから私はここで2つの問題を抱えています:
- windowは私には機能しませんが、evalは機能します。
- evalはローカル変数として機能しますが、グローバル変数としては機能しません。「var」が必要なようですが、evalの直前に「var」を使用することはできません。
評価を避けても大丈夫ですが、方法がわかりません。
PS:私はここでグローバルな文脈にいます。