2009-01-23 32 views
11

Bây giờ hầu hết các trình duyệt hiện đại đều hỗ trợ AJAX và các yêu cầu phía máy khách mà không thực hiện POST, vai trò của POST (biểu mẫu bài đăng) là gì?POST so với Ajax gọi

Có tình huống hoặc quy tắc chung nào khi POST luôn được ưu tiên hơn XmlHttpRequest không?

Tất cả POST đang thực hiện đó là đặt các cặp giá trị khóa biến đổi bên trong đầu máy chủ. Những lợi thế của POST tôi có thể nghĩ là số lượng lớn dữ liệu và trình duyệt di động. Có nhiều người khác tôi đang mất tích?

N.B. Tôi biết bạn có thể thực hiện POST bằng các cuộc gọi AJAX, tôi đang nói chủ yếu về một thẻ <form>

Trả lời

19

Câu hỏi này hơi phức tạp bởi vì nó làm cho hai khái niệm trở nên phức tạp. Đầu tiên là POST và thứ hai là Ajax. POST, so với GETting, là một phương thức HTTP khác nhau với các thực thi và ngữ nghĩa khác nhau. Ajax, hoặc XmlHttpRequest, có đối tác của nó trong yêu cầu/điều hướng bình thường. Bạn có thể sử dụng POST hoặc GET cho cả XmlHttpRequest và điều hướng bình thường và gửi biểu mẫu (tốt, POST luôn là "gửi biểu mẫu"). Sự khác biệt giữa XmlHttpRequest và các yêu cầu bình thường là một yêu cầu bình thường sẽ thay thế trang bằng một trang mới.

Bạn có thể viết về bất kỳ trang web nào chỉ sử dụng Ajax để lấy dữ liệu và thay đổi DOM; đó chính là cách Gmail hoạt động. Không có "hình thức đệ trình" theo nghĩa truyền thống. Nhưng vẫn còn GET và POST vì máy chủ và trình duyệt giải thích các kết quả khác nhau. GET được coi là idempotent; POST có nghĩa là cho các hoạt động thay đổi trạng thái trên máy chủ. Ví dụ: giao dịch ecom phải là POST. Điều này không thay đổi khi sử dụng Ajax vì bạn muốn các máy chủ proxy cũng hiểu rằng đây là POST và chúng không nên cố gắng lưu lại phản hồi.

Ngoài ra còn có những ưu điểm và nhược điểm khi sử dụng GET so với POST. Bạn không thể đánh dấu các kết quả của POST vì các tham số bị ẩn. Bạn không thể GET một cái gì đó với các giá trị tham số có độ dài không giới hạn vì IE chỉ hỗ trợ khoảng 2000 ký tự.

Ngoài ra còn có những nhược điểm khi sử dụng Ajax so với gửi bình thường; bạn không thể đánh dấu trang kết quả (vì trang không thay đổi); nút quay lại sẽ không hoạt động như mong đợi. Nhưng với Ajax, bạn có thể giảm thiểu dữ liệu được chuyển và cũng cung cấp các cập nhật thuận tiện cho một trang (chẳng hạn như theo dõi trạng thái của một quá trình dài) mà không gây phiền nhiễu nhấp nháy hoặc làm mới.

Tóm tắt hai loại yêu cầu, Ajax và gửi biểu mẫu truyền thống, cả hai có thể được sử dụng với GET và POST, và có ưu và khuyết điểm cho mỗi loại. Cả hai loại đều có thể làm mọi thứ khác có thể và vì vậy bạn có thể mong đợi để xem một kết hợp cho tương lai gần.

2

Nếu bạn cần làm mới toàn bộ trang, bài đăng có thể dễ dàng hơn.

13

Một số hành động không thể thực hiện được bằng các yêu cầu AJAX do các giới hạn bảo mật. Ví dụ: không thể tải lên tệp bằng AJAX.

+0

Tôi không nghĩ về điều đó, điểm tốt. – kemiller2002

+2

jQuery sẽ tự động tạo nội bộ iframe và biểu mẫu trong iframe và POST biểu mẫu đó nếu phát hiện tệp tải lên trong yêu cầu Ajax. –

+3

Mặc dù vậy, đó vẫn là POST, đó là quan điểm của tôi. – Welbog

1

Điểm khác biệt chính là POST của biểu mẫu gửi dữ liệu và có thể điều hướng đến URL mới trong một chuyến đi khứ hồi tới máy chủ. Ajax có thể gửi dữ liệu nhưng không thể điều hướng đến trang mới.

+0

Bạn không thể sử dụng window.location.href = xx sau khi cuộc gọi thành công? –

+0

@Chris, có khả năng truy cập GET, đây sẽ là chuyến đi khứ hồi thứ hai tới máy chủ. –

+0

@James Thông thường, thực tiễn tốt là bất kỳ POST không phải ajax nào đều phải kết thúc bằng chuyển hướng. Việc này được thực hiện để tránh gửi lại biểu mẫu khi tải lại trang. Nếu thực hiện theo phương pháp tốt này, chuyển hướng vẫn là chuyến đi khứ hồi thứ hai tới máy chủ. –

0

Er .. đăng biểu mẫu?

Bài đăng thực sự tốt cho các biểu mẫu lớn vì các giá trị được ẩn trong tiêu đề html và không được gắn vào chuỗi url?

+0

Bạn có thể sử dụng SOAP cho Ajax mặc dù –

0

Nếu lý thuyết, HTTP GET phải là một yêu cầu không cần thiết cho thông tin: Hai GET giống nhau sẽ trả về cùng một thông tin chính xác.

HTTP POSTs, nhằm giữ trạng thái và thực hiện các hành động: Hai POST giống nhau có thể thực hiện hành động khác nhau tùy thuộc vào người thực hiện, những gì đã được thực hiện trước đó và khi nó được thực hiện.

0

Tôi sẽ trả lời câu hỏi của riêng mình với this video Gần đây tôi đã tình cờ gặp Doug Crockford. Ông mô tả các cưa thấy giữa tất cả ajax và tất cả các trang làm mới.