2008-10-29 11 views
5

Khi biểu mẫu web được gửi và đưa người dùng đến trang khác, thường là trường hợp người dùng sẽ nhấp vào nút Quay lại để gửi lại biểu mẫu (biểu mẫu là tìm kiếm nâng cao trong trường hợp của tôi.)Làm cách nào để giữ lại nội dung biểu mẫu web cho nút quay số

Làm cách nào tôi có thể bảo toàn một cách đáng tin cậy các tùy chọn biểu mẫu mà người dùng đã chọn khi họ nhấp vào Quay lại (để họ không phải bắt đầu lại từ đầu bằng cách điền lại biểu mẫu nếu họ chỉ thay đổi một trong nhiều yếu tố biểu mẫu?)

Tôi có phải đi xuống tuyến lưu trữ các tùy chọn biểu mẫu trong dữ liệu phiên (cookie hoặc phía máy chủ) hay không. tôi?

(Môi trường là PHP/JavaScript - và trang web phải hoạt động trên IE6 + và Firefox2 +)

Trả lời

4

Tôi sẽ đặt nó trong phiên.
Nó sẽ là đáng tin cậy nhất và thậm chí nếu họ không đi thẳng "trở lại", nó vẫn sẽ có tùy chọn tìm kiếm của họ ở đó. Đặt nó trong cookie cũng sẽ hoạt động, nhưng sẽ không được đề xuất trừ khi nó là một hình thức rất nhỏ.

6

Tôi tin rằng bạn đang ở trong lòng thương xót của trình duyệt. Khi bạn quay trở lại, trình duyệt không đưa ra yêu cầu mới đối với máy chủ cho nội dung, nó sẽ sử dụng bộ nhớ cache (trong hầu hết mọi trình duyệt tôi từng thấy). Vì vậy, bất cứ điều gì phía máy chủ là ra ngoài.

Tôi tự hỏi liệu bạn có thể làm điều gì đó rất phức tạp như lưu trữ kết quả tìm kiếm trong cookie trong sự kiện onunload của trang kết quả không, sau đó đọc cookie trong javascript trên trang tìm kiếm và điền vào biểu mẫu - đây chỉ là suy đoán, tôi không biết liệu nó có hiệu quả hay không.

+5

Phía máy chủ không nhất thiết không phải là tùy chọn - JavaScript được thực thi lại cho trang - vì vậy chúng tôi có thể thực hiện yêu cầu Ajax. –

+0

Điều đó đúng. Tôi quên mất điều đó. –

2

Sự cố bạn gặp phải là trình duyệt sẽ trả về phiên bản được lưu trong bộ nhớ cache của trang và có thể không hỏi lại máy chủ, nghĩa là việc sử dụng phiên sẽ không liên quan.

Tuy nhiên, bạn có thể sử dụng AJAX để tải chi tiết về biểu mẫu đã gửi trước đây trên sự kiện tải của trang.

1

Bạn về cơ bản sẽ phải lưu trữ nó trên máy chủ của bạn theo một cách nào đó (có thể là trong các biến phiên, như được đề xuất) sau POST. Bạn cũng phải thiết lập Javascript trên trang biểu mẫu để thực thi khi tải để phát ra lời gọi AJAX để lấy dữ liệu từ máy chủ của bạn (theo định dạng JSON) và điền trước các trường biểu mẫu với dữ liệu.

đang

Ví dụ jQuery:

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

/getformdata.php của bạn có thể trả lại dữ liệu như:

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

và nó sẽ rõ ràng là trả về một mảng rỗng nếu không có gì lưu nào cho phiên. Đoạn mã trên là thô và chưa được kiểm tra, nhưng điều đó sẽ cho bạn ý tưởng cơ bản.

Lưu ý: các phiên bản hiện tại của Opera và Firefox sẽ giữ nguyên nội dung của biểu mẫu khi quay lại. Mã JS của bạn sẽ ghi đè lên điều này, nhưng điều đó sẽ an toàn.

0

Một tùy chọn ajaxy khác (do đó không tốt cho người dùng không có javascript) là gửi biểu mẫu qua javascript và sau đó đi tới trang xác nhận (hoặc hiển thị thông báo trên biểu mẫu bằng cách thay thế nút bằng tin nhắn). Bằng cách đó không có "trở lại" có thể.

0

Tại sao không lưu trữ các giá trị vào cookie trước khi gửi?Bạn cũng có thể bao gồm dấu thời gian hoặc mã thông báo để cho biết thời điểm được điền. Sau đó, khi tải trang, bạn có thể xác định liệu bạn có nên điền vào các trường có dữ liệu từ cookie hay chỉ để trống vì đây là tìm kiếm mới.

3

Tùy vào trình duyệt, nhưng trong hầu hết các trường hợp, bạn không phải làm gì cả.

IE, Firefox, v.v. sẽ vui vẻ nhớ nội dung của biểu mẫu ở trang trước và hiển thị lại khi Quay lại được nhấp ... miễn là bạn không làm bất cứ điều gì để ngừng hoạt động, chẳng hạn như làm cho trang không có bộ nhớ cache hoặc xây dựng biểu mẫu hoàn toàn từ tập lệnh.

(Đưa nội dung trong phiên giao dịch có khả năng nhầm lẫn giữa các trình duyệt với hai tab mở trên hình thức tương tự. Hãy rất cẩn thận khi làm bất cứ điều gì như thế.)

+0

Trường hợp ngoại lệ là nếu hành động biểu mẫu là trang https, tôi nghĩ (và có thể nếu vị trí biểu mẫu là https). –

0

Bạn cũng có thể làm tất cả mọi thứ ở địa phương bằng javascript. Vì vậy, bạn lưu trữ một cookie với giá trị tìm kiếm và trên tải trang, bạn kiểm tra xem cookie có tồn tại hay không. Một cái gì đó như thế này:

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

Chưa thử nghiệm nhưng phải hoạt động. Bạn sẽ cần jQuery cho việc này.

chức năng Cookie đến từ: http://www.quirksmode.org/js/cookies.html

tôi nên nói btw rằng cả hai FireFox và IE có hành vi này theo mặc định.