2009-06-02 36 views
5

Hãy tưởng tượng người dùng vừa đăng dữ liệu lên ứng dụng web của bạn và bạn muốn hiển thị lại trang hiện tại với thông báo về thành công hay thất bại của họ. Điều này trở nên phức tạp.Làm thế nào để bạn xử lý tất cả các cách bạn có thể gửi từ một POST HTTP?

Nếu dữ liệu hợp lệ và người dùng mong đợi html, bạn muốn phát hành chuyển hướng để làm mới không khiến họ đăng lại. Bạn muốn chuyển hướng đến người giới thiệu, nếu nó tồn tại và hiển thị một tin nhắn. Nếu họ không mong đợi html, bạn chỉ có thể trả về 200 OK.

Nếu dữ liệu không hợp lệ và người dùng đang mong html, bạn muốn hiển thị lại trang họ đến, với lỗi hiển thị để họ có thể đăng lại. Để thực hiện điều này, bạn phải chạy hành động trước đó và làm cho nó nhận biết được thông báo lỗi. Để quyết định đó là hành động trước đó, có lẽ bạn đã bao gồm đó là một tham số ẩn trong biểu mẫu. Nếu họ không mong đợi html, bạn có thể trả về lỗi ứng dụng khách 4xx.

Tôi thấy mình đang thực hiện điệu nhảy ngớ ngẩn này quá nhiều lần. Vì vậy, các câu hỏi là:

1) Làm thế nào bạn sẽ tóm tắt toàn bộ quá trình này để bất kỳ bài đăng biểu mẫu nào có thể tận dụng lợi thế của nó?

2) Cách duy trì hoặc lặp đi lặp lại ít nhất để đạt được điều này trong khung web yêu thích của bạn là gì?

3) Có điều gì bạn sẽ thay đổi cho toàn bộ quá trình này có thể làm cho nó đơn giản hơn không?

Ý tưởng 1: Không bao giờ hiển thị trên bài đăng, luôn chuyển hướng. Nhét dữ liệu lỗi trong phiên cho một giây thứ hai giữa các yêu cầu, và sau đó xóa nó, giống như thông báo thành công. Bằng cách đó, các bài đăng hợp lệ và không hợp lệ có thể được xử lý theo cùng một cách.

Ý tưởng 2: Không thực hiện bất kỳ bài đăng HTTP bình thường nào. Chỉ sử dụng ajax. Bây giờ bạn không phải lo lắng về việc hiển thị hoặc chuyển hướng. Điều này sẽ chỉ hữu ích nếu bạn đã có ứng dụng nặng ajax.

Trả lời

0

Làm cho các ứng dụng web phong nha mà không yêu cầu JavaScript là quá nhiều công việc. Tôi sẽ sử dụng AJAX trong những tình huống này.

3

Ý tưởng 2 nằm ngoài cửa sổ. Đó là một ý tưởng khủng khiếp và không cần thiết chút nào. AJAX là tốt, nhưng đừng lạm dụng nó. Chưa kể - điều gì về đoạn người dùng bị tắt Javascript?

Tôi nghĩ rằng những gì bạn đang suy nghĩ về (mà không thực sự biết điều đó) là mẫu Post/Redirect/Get. Đó là thực hành tốt nhất khi nói đến điều này, và bạn nên làm theo nó. Về cơ bản, như bạn đã nói, bạn không bao giờ trả lời POST bằng bất kỳ điều gì ngoài chuyển hướng. Theo như thông báo, hầu hết thời gian bạn biết nơi họ đến từ vì hành động cụ thể. Nếu không, HTTP REFERER là một lựa chọn thay thế. Có, nó có thể bị vô hiệu hóa, nhưng đó là ~ 1% người dùng của bạn, nếu có. Theo như thông báo, phiên là hoàn hảo cho việc này. Chỉ cần lưu trữ mã và thông báo trong phiên hiện tại và làm cho mẫu của bạn biết về chúng. In ra thông báo nếu nó tồn tại và xóa các biến phiên.

+0

Tôi giả sử bạn không biết bạn đến từ đâu. Tôi thường gặp phải các tình huống mà tôi muốn đăng lên cùng một url từ các trang khác nhau, để sử dụng lại một hành động. Trong trường hợp dữ liệu không hợp lệ và tôi đang hiển thị thay vì chuyển hướng, tôi cần phải intuit hành động trước đó. Tôi cho rằng tôi vẫn có thể giới thiệu điều này từ người giới thiệu. –

0

Không có sự xấu hổ khi thực hiện đăng lại và bạn thực sự không thể tránh postback vì đó là cách dễ nhất để duy trì dữ liệu qua các yêu cầu HTTP. Đó hoặc các tham số truy vấn vẫn là một chuyến đi vòng khác đến máy chủ để nó có cùng một giá trị với một vài sự cân bằng. Không nên sử dụng Chế độ xem hoặc phiên.

Lý tưởng là cùng một trang sẽ kiểm tra xem yêu cầu có phải là bài đăng và xử lý tất cả các logic có trong đó. Thường xuyên hơn, mã của bạn phía sau hoặc các trang ứng dụng có biểu mẫu sẽ có phần xử lý bài đăng.

+0

Bài đăng là gì? Trạng thái xem là gì? –

Các vấn đề liên quan