php / mysql / javascript - необходимо установить переменную GET вокруг (включая URL) после загрузки страницы - PullRequest
0 голосов
/ 19 ноября 2010

Это очень сложная проблема для описания.

Большая картинка: Ajaxed диалог отправляет на страницу, чтобы создать новую запись набора содержимого. После создания записи набора содержимого этот вновь созданный набор содержимого должен быть выбранным набором содержимого, а ко всему создаваемому или измененному содержимому должен быть присоединен новый идентификатор набора содержимого. Идентификатор набора содержимого создается с использованием поля автоинкремента в MySQL во время загрузки страницы.

Детали проблемы: У меня есть страница, которая использует ajax, чтобы открыть диалог создания набора контента. Диалог отправляется на пустой URL, потому что он может быть вызван из более чем одного места, и я хочу, чтобы диалог отправлялся на любой URL, с которого он был вызван. После того, как диалог отправляется на страницу, с которой он был вызван, некоторый PHP на странице создает запись набора содержимого в базе данных MySQL. Мне нужно, чтобы идентификатор вставки вновь созданной записи передавался со страницы на страницу с помощью переменной GET (самый простой метод, поскольку я уже передал переменные разбиения на страницы таким образом), но поскольку страница должна загружаться, прежде чем я смогу получить идентификатор вставки, у меня нет способ заполнения всех мест, где должна находиться переменная GET (по ссылкам на страницы, переменная php $ _GET, URL).

Некоторые вещи, которые следует учитывать:

  • Я бы передавал вновь созданный идентификатор вставки через переменную сеанса, за исключением того, что это вызывает проблемы, когда кто-то нажимает кнопку «Назад», и переменная сеанса не возвращается к своему предыдущему значению.
  • Я бы использовал Javascript и PHP для изменения различных мест, где используется эта переменная id вставки, за исключением того, что если они открывают другой ajaxed-диалог, отправляющий пустой URL-адрес, пустой URL-адрес, конечно, не будет иметь новую переменную GET. Кроме того, это кажется очень небрежным и было бы кошмаром для поддержания.
  • Я бы после создания записи перенаправил бы обратно на ту же страницу после добавления новой переменной GET, за исключением того, что я не смог бы пропустить переменные POST, что сделало бы сообщения об ошибках и успехах полной болью в заднице. Я не хотел бы использовать GET-переменные, чтобы сообщить странице, какое сообщение об ошибке / успехе отображать, потому что GET-переменные передаются вокруг страницы на страницу, используя $ _SERVER ['QUERY_STRING'], а также пустые ссылки.
  • Я не мог просто сделать вновь созданный Content Set автозагрузкой после создания. Это заставляет пользователя выполнить дополнительный шаг загрузки вновь созданного набора содержимого, чего я бы хотел избежать.

Есть ли какое-нибудь элегантное решение для этого? Эта проблема может быть очень уникальной из-за того, как настроен веб-сайт, но кто-то должен иметь дело с чем-то подобным. Я надеюсь, что мне не придется слишком сильно менять дизайн сайта, чтобы решить эту маленькую проблему. Любые идеи приветствуются.

Ответы [ 3 ]

0 голосов
/ 19 ноября 2010

Я понимаю, что вы неохотно относитесь к сессии, но сейчас самое время ее использовать.

Другая идея заключается в использовании скрытого ввода на ваших страницах.

После первого диалога делается запрос к PHP (через ajax), который вставляет запись в db и возвращает вам идентификатор, где она была вставлена. Правильно?

В обратном вызове Ajax вы можете:

а) сделать ввод скрытого типа для хранения идентификатора, сделать это в форме. идентификатор в каждом сообщении

b) выполнить хитрый javascript, чтобы вставить «& id = id» в каждую строку ссылки / кнопки. JQuery, безусловно, было бы полезно здесь. это сложно, потому что это могут быть ссылки, действия кнопок, что угодно

Я не совсем понимаю, что вы настаиваете на том, чтобы поместить его в GET, но вы можете сделать это с помощью некоторой дополнительной работы. Вы не можете поместить его в URL после ajax без перезагрузки, но вы можете быть уверены, что везде, где вы впоследствии это сделаете,

0 голосов
/ 19 ноября 2010

Я бы согласился с решением на основе сеанса здесь.Имейте в виду, что вы должны иметь возможность создать механизм возврата к старому значению, если пользователь выполнит ответный удар.Для этого вам понадобятся три переменные сеанса, одна с текущим значением идентификатора, одна с предыдущим значением идентификатора и одна, которая содержит URL-адрес последней страницы, на которой вы были.Таким образом, вы сможете проверить, нажал ли пользователь кнопку «Назад», проверив, равен ли текущий URL последнему URL-адресу, сохраненному в переменной сеанса, и, если это так, вернуться к старому идентификатору.

Обратите внимание, что это всего лишь общая концепция, и я уверен, что вы столкнетесь с некоторыми техническими проблемами, которые необходимо выяснить, прежде чем система, подобная этой, будет работать должным образом.

0 голосов
/ 19 ноября 2010

Вы уверены, что хотите изменить хеш-строку URL (как бы она ни называлась). Потому что вы не можете изменить URL. Посмотрите, как такие сайты, как Facebook, имеют свои URL.

...