Измените URL строки поиска в приложении Ajax для соответствия текущему состоянию

Просто добавьте метод to_json в ваш класс следующим образом:

def to_json(self):
  return self.message # or how you want it to be serialized

И добавьте этот код (из этот ответ ) , чтобы где-то в верхней части всего:

from json import JSONEncoder

def _default(self, obj):
    return getattr(obj.__class__, "to_json", _default.default)(obj)

_default.default = JSONEncoder().default
JSONEncoder.default = _default

Это будет модуль monkey-patch json, когда он будет импортирован, поэтому JSONEncoder.default () автоматически проверяет специальный метод «to_json ()» и использует его для кодирования объект, если найден.

Так же, как сказал Онур, но на этот раз вам не нужно обновлять каждый json.dumps() в вашем проекте.

164
задан Rais Alam 9 January 2013 в 05:43
поделиться

4 ответа

Способ сделать это должно управлять location.hash, когда Ajax обновляет результат в изменении состояния, что требуется иметь осторожный URL. Например, если URL Вашей страницы:

http://example.com/

, Если клиентская функция выполнила этот код:

// AJAX code to display the "foo" state goes here.

location.hash = 'foo';

Затем URL, отображенный в браузере, был бы обновлен к:

http://example.com/#foo

Это позволяет пользователям отмечать состояние "нечто" страницы и использовать историю браузера для навигации между состояниями.

С этим механизмом на месте, необходимо будет тогда проанализировать часть хеша URL на стороне клиента с помощью JavaScript, чтобы создать и отобразить соответствующее начальное состояние, поскольку идентификаторы фрагмента (часть после #) не отправляются на сервер.

hashchange плагин Ben Alman делает последнего бризом при использовании jQuery.

116
ответ дан Dave Ward 23 November 2019 в 21:14
поделиться

SWFAddress работает в Flash & проекты JavaScript и позволяют Вам создать bookmarkable URL (использующий упомянутый выше метод хеша), а также дающий Вам поддержка кнопки "Назад".

http://www.asual.com/swfaddress/

3
ответ дан 23 November 2019 в 21:14
поделиться

Это подобно тому, что сказал Kevin. У Вас может быть свое состояние клиента как некоторый объект JavaScript, и когда Вы хотите сохранить состояние, Вы сериализируете объект (использующий JSON и кодирование base64). Можно тогда установить фрагмент href к этой строке.

var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;

document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history

первый путь будет рассматривать новое состояние как новое местоположение (таким образом, кнопка "Назад" возьмет их к предыдущему местоположению). Последний не делает.

11
ответ дан Edward Luong 23 November 2019 в 21:14
поделиться

window.location.hash метод является предпочтительным способом сделать вещи. Для объяснения того, как сделать это, Шаблоны Ajax - Уникальные URL.

YUI имеет реализацию этого шаблона как модуль, который включает IE определенная работа arounds для получения кнопки "Назад", работающей наряду с перезаписью адреса с помощью хеша. Менеджер по Истории Браузера YUI.

Другие платформы имеют подобные реализации также. Важный момент - то, если Вы хотите, чтобы история работала наряду с перезаписью адреса, различным браузерам нужны различные способы обработать его. (Это детализировано в первой статье ссылки.)

IE нужен iframe базирующийся взлом, где Firefox произведет двойную историю с помощью того же метода.

3
ответ дан Drew Noakes 23 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: