Tìm hiểu về AJAXified Form và phương phức respond_to
I>Đầu tiên là về AJAXified Form. Chắc mọi người đã biết về form và cách tạo form ,bình thường thì khi submit nó sẽ request tới 1 địa chỉ nào đó. AJAXified Form cũng giống như form bình thường ,nhưng khi submit thì sẽ dùng ajax request đến server ,khi nhận được dữ liệu trả về thì sẽ xử lý ...
I>Đầu tiên là về AJAXified Form.
Chắc mọi người đã biết về form và cách tạo form ,bình thường thì khi submit nó sẽ request tới 1 địa chỉ nào đó.
AJAXified Form cũng giống như form bình thường ,nhưng khi submit thì sẽ dùng ajax request đến server ,khi nhận được dữ liệu trả về thì sẽ xử lý bằng javascript.
<%= form_for @zombie, remote: true do |f| %>
Khi thêm param remote: true là form sẽ dùng ajax
II>Thứ 2 là phương phức respond_to Đây là hàm trả dữ liệu về khi ajax gọi tới
respond_to do |format| format.html { redirect_to @user } format.js format.json {render json: @user.to_json} end
Hàm respond_to trên có thể trả về 3 loại kiểu dữ liệu : html, javascript, json
+++Các vẫn đề: AJAXified Form sẽ nhận kiểu dữ liệu nào để xử lý.
Trường hợp 1:
<%= form_for @zombie, remote: true, :html => {:'data-type' => 'json'} do |f| %>
khai báo rõ kiểu dữ liệu cần trả về là json, thì server sẽ trả về kiểu json
Trường hợp 2:
<%= form_for @zombie, remote: true, do |f| %>
Không có khai bào kiểu dữ liệu, server sẽ trả về kiểu theo thứ tự sau : js->html->json|xml Ví dụ :
respond_to do |format| format.html { redirect_to @user } format.js format.json {render json: @user.to_json} end
Do có khai báo format.js nên sẽ trả về js do độ ưu tiên
respond_to do |format| format.html { redirect_to @user } format.json {render json: @user.to_json} end
Sẽ xử lý html.Trình duyệt sẽ replace html : Cụ thể quá trình này là, server sẽ gửi về 1 đoạn javascript như sau:
Turbolinks.clearCache() Turbolinks.visit("http://localhost:3000/users/6", {"action":"replace"})
Nó sẽ request đến server lấy về html rồi replace, Điều này tương ứng với việc trả về html cho request của ajax.
respond_to do |format| format.json {render json: @user.to_json} format.xml {render xml: @user.to_xml} end
Nếu không có khai báo js hoặc html thì đương nhiên server sẽ trả về json hoặc xml (tùy theo cái nào viết trước)
Trường hợp 3: Khi không khai báo respond_to trong controller thì rails sẽ tự động trả về file js.erb tương ứng
Trên đây là 1 vài tìm hiểu của mình về chủ đề này. Rất mong được sự góp ý của mọi người. Xin cảm ơn