Nasıl web formu içeriği geri düğmesini muhafaza edilebilir

7 Cevap php

Bir web formu teslim ve başka bir sayfaya kullanıcı alır zaman, oldukça sık kullanıcı tekrar formu göndermek için Geri düğmesini tıklatın olacağı durumdur (Form benim durumumda gelişmiş bir arama motorudur.)

Onlar Geri tıkladıklarında nasıl güvenilir kullanıcı tarafından seçilen formu seçenekleri koruyabilirsiniz (böylece onlar sadece çok form elemanları birini değiştirerek eğer tekrar formu doldurarak sıfırdan başlamak zorunda değil mi?)

Ben oturum verileri (kurabiye veya sunucu tarafı) form seçenekleri saklamak ya da benim için bu işlemek için tarayıcı almak için bir yol var rota aşağı gitmek zorunda mı?

(- Ve site IE6 + ve Firefox2 + çalışmak zorundadır Çevre PHP / JavaScript)

7 Cevap

Ben tarayıcı insafına olduğuna inanıyorum. Geri vurduğunuzda, tarayıcı içerik için sunucuya yeni bir istek yapmaz, (Ben yine de gördüğüm hemen her tarayıcıda) önbelleğini kullanır. Yani bir şey sunucu tarafı çıktı.

Eğer çok sonuç sayfasının onunload olay sırasında bir tanımlama arama sonucunu saklamak ve daha sonra arama sayfasındaki javascript çerez okuma ve form doldurma gibi karmaşık bir şey yapabileceğini merak ediyorum - ama bu sadece bir spekülasyon işe olsaydı, ben bilmiyorum.

Bu tarayıcıda kalmış, ancak çoğu durumda bir şey yapmak zorunda değilsiniz.

Vb IE, Firefox, bu tür hayır sayfa yapma, sürece bu çalışmayı durdurmak için hiçbir şey yok gibi ... mutlu önceki sayfada formun içeriğini hatırlamak ve Geri tıklandığında tekrar gösterecektir -cache veya script tamamen bina biçimi.

(Oturumda şeyler koymak aynı form açık iki sekme ile tarayıcıları yanıltır muhtemeldir. Böyle bir şey yaparken çok dikkatli olun.)

Eğer varsa sorun tarayıcı sayfanın önbelleğe alınmış bir sürümü geri dönmek, ve muhtemelen yine bunun için sunucu sormak değil, oturumu kullanarak anlam alakasız olurdu olduğunu.

Ancak sayfanın load olayı önceden gönderilen formun ayrıntılarını yüklemek için AJAX kullanabilirsiniz.

Bu temelde (önerdiği gibi, muhtemelen oturum değişkenleri) bu POST sonra bir şekilde sunucu üzerinde saklamak gerekir. Ayrıca (json formatında, diyelim ki,) sunucudan veri almak ve veri ile form alanları önceden doldurmak için bir AJAX çağrısı vermek için yük yürütmek için formu sayfada kurulum JavaScript gerekiyor.

Örnek kod jQuery:

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

Sizin / getformdata.php gibi veri döndürebilir:

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

oturum için henüz kaydedilmemiş bir şey olsaydı ve tabii ki boş bir dizi dönecekti. Yukarıdaki kod kaba ve denenmemiş, ama bu size temel bir fikir vermelidir.

Bir yan not olarak: Geri giderken Opera ve Firefox güncel sürümleri form alanı içeriğini koruyacaktır. JS kodu Bunun üzerine yazmak, ama bu güvenli olmalıdır.

Başka ajaxy seçenekleri (yani javascript olmayan kullanıcılar için iyi değil) javascript aracılığıyla formu ve daha sonra onay sayfasına gidin (veya bir mesajla düğmesini değiştirerek formda mesajı göster) etmektir. Bu şekilde herhangi bir "arka" mümkün bulunmaktadır.

Neden göndermeden önce bir çerez içine değerleri saklamak değil? Ayrıca bir zaman damgası eklemek veya dışarı dolu iken göstermek için belirteç olabilir. Sonra sayfa yüklendiğinde, size çerez verilerle alanları doldurun gerektiğini belirlemek, ya da bu yeni bir arama olduğu için sadece boş bırakabilirsiniz zaman.

Ayrıca javascript ile yerel şeyi yapabilirdi. Yani arama değeri ile bir çerez saklamak ve çerez varsa pageload üzerinde kontrol. Böyle bir şey:

$('#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);
});

Bu test değil ama çalışması gerekir edilir. Bunun için jQuery ihtiyacınız olacak.

http://www.quirksmode.org/js/cookies.html: Çerez fonksiyonlar geldi

Ben FireFox ve IE hem de varsayılan olarak bu davranışı olduğunu btw diyebilirim.