Как содержание веб-формы может быть сохранено для кнопки "Назад"

Как указано в комментариях, copy_n небезопасно для этой работы, но вы можете использовать copy_if с изменяемой лямбдой:

#include 
#include 
#include 
#include 

int main(){
    const int N = 10;
    std::vector v;
    //optionally v.reserve(N);
    std::copy_if(
        std::istream_iterator(std::cin),
        std::istream_iterator(), 
        std::back_inserter(v), 
        [count=N] (int)  mutable {
            return count && count--;
    });

    return 0;
}

как указано в этом ответе: std :: скопировать n элементов или до конца

5
задан MvanGeest 18 June 2010 в 16:39
поделиться

8 ответов

Я поместил его в сессию.
Это будет самым надежным и даже если они не пойдут прямо "назад", то это будет все еще иметь их параметры поиска там. Помещение его в cookie также работало бы, но не будет рекомендоваться, если это не очень маленькая форма.

4
ответ дан 18 December 2019 в 10:50
поделиться

Это до браузера, но в большинстве случаев Вы ничего не должны делать.

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

(Помещающий материал в сессию, вероятно, перепутает браузеры с двумя вкладками, открытыми на той же форме. Будьте очень осторожны при выполнении чего-либо как этот.)

3
ответ дан 18 December 2019 в 10:50
поделиться

Проблема, которую Вы имеете, состоит в том, что браузер возвратит кэшированную версию страницы и вероятно не попросит у сервера его снова, означая, что использование сессии было бы не важно.

Вы могли однако использовать Ajax для загрузки деталей ранее отправленной формы на событии загрузки страницы.

2
ответ дан 18 December 2019 в 10:50
поделиться

Я полагаю, что Вы во власти браузера. Когда Вы защищаетесь, браузер не выполняет новый запрос к серверу для содержания, это использует кэш (почти в каждом браузере, который я видел так или иначе). Так что-либо серверная сторона отсутствует.

Я задаюсь вопросом, могли ли Вы сделать что-то очень сложное как хранение результата поиска в cookie во время onunload события страницы результатов и затем чтения cookie в JavaScript на странице результатов поиска и заполнении формы - но это - просто предположение, я не знаю, работало ли это.

6
ответ дан 18 December 2019 в 10:50
поделиться

Необходимо было бы в основном сохранить его на сервере в некотором роде (вероятно, в переменных сеанса, как предложено) после POST. Также необходимо установить JavaScript на странице формы для выполнения на загрузке для издавания приказа Ajax, чтобы получить данные из сервера (в, скажем, формате JSON) и предварительно заполнить поля формы данными.

Пример код jQuery:

$( document ).ready( function() {
  $.getJSON(
    "/getformdata.php",
    function( data ) {
      $.each( data.items, function(i,item) {
        $( '#' + item.eid ).val( item.val );
      } );
    });
} );

Ваш/getformdata.php мог бы возвратить данные как:

{
  'items': [
    {
      'eid': 'formfield1',
      'val': 'John',
    },
    {
      'eid': 'formfield2',
      'val': 'Doe',
    }
  ]
}

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

Как примечание стороны: текущие версии Opera и Firefox сохранят полевое содержание формы при возвращении. Ваш код JS перезапишет это, но это должно быть безопасно.

1
ответ дан 18 December 2019 в 10:50
поделиться

Другой ajaxy опции (таким образом, это не хорошо для пользователей без JavaScript) должен отправить форму с помощью JavaScript и затем пойти страница подтверждения (или показать сообщение на форме путем замены кнопки сообщением). Тем путем там не является никакая возможная "спина".

0
ответ дан 18 December 2019 в 10:50
поделиться

Почему бы не сохранить значения в cookie перед представлением? Вы могли также включать метку времени или маркер для указания, когда это было заполнено. Затем, когда страница загружается, можно определить, необходимо ли заполнить поля с данными из cookie или просто оставить их незаполненный, потому что это - новый поиск.

0
ответ дан 18 December 2019 в 10:50
поделиться

Вы могли также сделать все локальное JavaScript. Таким образом, Вы снабжаете cookie поисковым значением, и на pageload Вы проверяете, существует ли cookie. Что-то вроде этого:

$('#formSubmitButton').click( function() {
    var value = $('#searchbox').val();
    var days = 1;
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = "searchbox="+value+expires+"; path=/";
});

$(document).ready( function() {
    var nameEQ = "searchbox=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) var valueC = c.substring(nameEQ.length,c.length);
   }
   $('#searchbox').val(valueC);
});

Не протестировали это, но, должен работать. Вам будет нужен jQuery для этого.

Функции cookie прибыли из: http://www.quirksmode.org/js/cookies.html

Я должен сказать, что btw, что и FireFox и IE имеют это поведение по умолчанию.

0
ответ дан 18 December 2019 в 10:50
поделиться
Другие вопросы по тегам:

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