Jquery XHR, который приводит к изменению домена, которое сохраняется через обновления и т. Д. - PullRequest
5 голосов
/ 04 августа 2011

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

Итак, у меня есть веб-страница (размещенная через google app engine), в которой перечислено несколько отдельных форм (каждая из которых представляет собойвопрос / головоломка).Одна головоломка имеет несколько текстовых полей для заполнения, а также кнопку отправки.После нажатия кнопки отправки на сервер (на python) выполняется запрос ajax, который проверяет правильность полученных ответов.В ответ страница обновляется, добавляя соответствующие галочки и крестики в соответствующих текстовых полях, а также наложение средней непрозрачности, охватывающее весь вопрос (для придания всему эффекту «серого»).

Когда страница обновляется, эти изменения, очевидно, исчезают.Однако запрос ajax сохраняет информацию об ответе в базу данных.Сами вопросы создаются путем рендеринга страницы с использованием Jinja2.

Таким образом, все соответствующие данные сохраняются, так что в следующий раз, когда пользователь вернется на страницу, вопросы, на которые он ответил в прошлом, все еще будут выделены серым цветом,его ответы и галочка / крестики все еще там.Тем не менее, я не могу понять, каким будет лучший способ сделать это.Должен ли я жестко закодировать модификации dom для готовых вопросов, используя операторы if в цикле jinja2 (например: для каждого создаваемого вопроса, если на него уже был дан ответ, то отобразите его по-другому).Или было бы лучше позволить странице нормально загружаться, а затем выполнять XHR при загрузке для каждого вопроса / формы на странице?

Действительно, что я хочу сделать, так как каждая форма отображается в Jinja2, выполнить xhr, чтобы увидеть, есть ли у него ответ в БД, и, если это так, действовать соответствующим образом.Но смешивание jinja2 с ajax кажется довольно грязным, наверняка есть лучший способ решить эту проблему?

Извините за длинный запутанный вопрос, надеюсь, он хотя бы понятен.

1 Ответ

1 голос
/ 05 августа 2011

Я бы выбрал вариант варианта # 1 (используйте Jinja2 для визуализации правильной разметки) - если вы не визуализируете очень большое количество форм, страница должна возвращаться в очень коротком порядке (и если у вас do очень большое количество форм, выполнение большого количества запросов XHR не будет быстрым).Кроме того, позволяя Jinja отображать ваш HTML-код, вы гарантируете, что пользователи без JavaScript по крайней мере смогут увидеть свои предыдущие ответы (вместо того, чтобы заставлять всех, кто обращается к вашему приложению, включать JavaScript.)у вас их еще нет):

  1. Способ представления ваших форм / вопросов - вы, вероятно, найдете класс, который лучше всего подходит для требуемой инкапсуляции.

  2. Способ рендеринга экземпляров этого класса в HTML.Это точно то, для чего были разработаны макросы .Кроме того, вы могли бы дать вашему классу метод __html__ (не забудьте вернуть экземпляр Markup).

...