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.
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. –