2012-05-10 9 views
0

jquery/phpでシンプルなボードゲームをデザインしています。ボードの状態は現在、配列としてphpセッション変数にサーバーサイドで格納されています。各ターンはphpへのajax呼び出しとして実行され、この配列を更新するためのロジックを実行し、配列をjqueryに返してhtmlとしてレンダリングします。私はPHPのセッション変数でボード状態の永続性を達成しています...しかし、これは良い習慣ではないと思います。ブラウザは両方のタブを同じセッションの一部として扱うため、複数のタブでも再生できません。データベースに店舗の状態以外の解決策を見つけたいと思っていますが、これが唯一合理的な解決策であれば教えてください:)。ありがとう!データ永続化jquery/phpを達成する最良の方法は何ですか?

+0

をaccross。 $ _SESSION ['game_tab1']と$ _SESSION ['game_tab2']を使用してみてください。基本的にタブを参照するIDを追加します –

+0

セッションを使用している場合は、保存するのではなく、同じセッション内のゲームのすべてのインスタンス – valen

答えて

1

LawnchairのようなJavaScriptライブラリは、クライアント側にデータを保存するのはどうですか?デフォルトで

、lawnchairは、DOMストレージを使用して保持されますが、他のアダプタが利用可能とDOMある場合 ストレージは、現在実行中のJavaScriptランタイムによってサポートされていません。それぞれの 連続するアダプターが動作するまで、lawnchairは各アダプターを試行します。簡単です。

ドムストレージはタブにまたがっています。ローカル記憶領域に格納され

経由Dive.Into.Javascript

データの有効期限が切れていないとスパンを使用して、両方のタブで同じ変数名を使用しているため、おそらくださまざまなタブおよび/または窓

0

あなたはJavaScriptを使用してクライアント側にデータを保存することができます。このようなjquery dataような隠されたフィールドまたは使用のメカニズムのいずれかの場所:

$('body').data('player1-pos-x', x); 
$('body').data('player1-pos-y', y); 

問題それには、ブラウザを更新すると、すべてが失われています。

別の方法は、サーバー側とクライアント側の両方にデータを格納することです。同じセッションの下でゲームをグループ化するために、game-id、session-idのペアを格納することができます。ブラウザをリフレッシュすると、セッションが関連するすべてのゲームが行われ、データで決定が下されます。

+0

ユーザーが新しいタブを開くとどうなりますか?ブラウザの更新と同じように扱われませんか?クライアントサイドのフィールドは空になります(リフレッシュされた場合のように)。しかし、セッションデータには値が入りますか?多くのタブを開くと、各タブで同じゲームを読み込むことになりますか? – valen

+0

タブを開き、game-idをnullに設定してから、新しいゲームを作成するか、同じセッションIDに関連付けられた既存のゲームを読み込むことにします。 ajaxを使用して、サーバー側にゲームIDのリストを照会するか、新しいgame-idを作成し、適切な関連データをロードする必要があります。この方法で複数のタブを開いて別のゲームを開くことができます。これを念頭に置いておくと、同じゲームを読み込むと競合が発生する可能性があるので、システムを比較的複雑にすることができます。対処する必要があります。また、クライアント側とサーバー側の両方にプレーヤーを保存する必要があります –

関連する問題