2012-05-10 3 views
0

Я разрабатываю простую настольную игру в jquery/php. Состояние платы в настоящее время хранится на стороне сервера в переменной сеанса php в виде массива. Каждый ход выполняется как ajax-вызов php, который выполняет логику для обновления этого массива и возвращает массив в jquery для рендеринга как html. Я добиваюсь сохранения состояния правления с переменными сеанса php ... но я не думаю, что это хорошая практика. Я не могу даже воспроизвести его на нескольких вкладках, потому что браузер рассматривает обе вкладки как часть одного и того же сеанса. Я хотел бы найти решение, отличное от состояния хранилища в базе данных ... но если это единственное разумное решение, пожалуйста, дайте мне знать :). Благодаря!Каков наилучший способ добиться сохранения данных jquery/php?

+0

Это, вероятно, потому, что вы используете одни и те же имена переменных для обеих вкладок; попробуйте использовать $ _SESSION ['game_tab1'] и $ _SESSION ['game_tab2'], .. в основном добавить id, ссылающийся на вкладку –

+0

. Если вы используете сеансы, я бы хотел иметь отдельный сеанс для каждого экземпляра игры, а не хранить все экземпляры игры в том же сеансе – valen

ответ

1

Как насчет библиотеки javascript, например Lawnchair, для хранения данных на стороне клиента?

по умолчанию, lawnchair будет сохраняться с помощью хранения Dóm, но если другие адаптеры доступны и Dóm хранения не поддерживается в настоящее время выполнения выполнения JavaScript. lawnchair будет пытаться каждый последовательный адаптер , пока он не найдет тот, который работает. легко.

Это хранилище Dom хранится также через вкладки.

через Dive.Into.Javascript

Данные, сохраненные в локальном хранилище, не истекает и пролеты разнится для различных вкладок и/или окна

0

вы можете сохранить данные на стороне клиента с помощью javascript. Либо место в скрытых полях или механизмов использования как jquery data как это:

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

Проблема с ним, когда вы обновите браузер, все потеряно.

Другой способ - хранить данные как в стороне сбоку, так и на стороне клиента. вы можете хранить пару идентификатор игры, идентификатор сеанса, чтобы группировать игры в тот же сеанс. Когда браузер обновится, у вас будет вся игра, к которой относится сессия, и принять решение с данными.

+0

Что делать, если пользователь открывает новую вкладку ... разве это не будет рассматриваться так же, как при обновлении браузера? поля на стороне клиента будут пустыми (как если бы они были обновлены) .. но данные сеанса будут заполнены? Открытие многих вкладок приведет к загрузке одной и той же игры на каждой вкладке, не так ли? – valen

+0

Вы открываете вкладку и устанавливаете идентификатор игры равным нулю, затем принимаете решение о создании новой игры или загружаете существующую игру, связанную с тем же идентификатором сеанса. Вам необходимо использовать ajax для запроса серверной части для списка идентификатора игры или создания нового идентификатора игры, а затем загрузить соответствующие данные. Таким образом, вы можете открыть несколько разных открыток. помните, что это делает систему относительно сложной, так как если загрузка одной и той же игры может привести к конфликту, который вам нужно обработать, и каждый движок игрока должен быть сохранен как на стороне клиента, так и на стороне сервера –

Смежные вопросы