2010-09-25 32 views
17

Tôi có một chút gọi ajax mà các cuộc gọi đường ray:Đơn giản chỉ cần trở về thành công hay thất bại từ cuộc gọi ajax trong đường ray

$.ajax({ 
     type: "POST", 
     url: '...', 
     data: ({ ... 
       }), 
     success: function(response, status) { 
        console.log(status); 
     } 
    }); 

Trong bộ điều khiển đường ray Tôi chỉ đơn giản là xóa một mục từ cơ sở dữ liệu, và tôi chỉ đơn giản muốn trả lại nếu nó thành công hay không. Cách tốt nhất là gì?

Tôi có nên trả về JSON trong response_to không? Nếu vậy, chính xác những gì bạn sẽ có nó chứa?

Trả lời

25

Cách tốt nhất để biểu thị sự thành công theo cách này là để đặt sau đây trong điều khiển của bạn ...

def destroy 
    # ... your code ... 
    respond_to do |format| 
    format.json { head :ok } 
    end 
end 
+4

cảm ơn! cho bản ghi, cho một sự thất bại nó có thể là một cái gì đó như: format.json {render: json => @ obj.errors,: status =>: unprocessable_entity} – 99miles

+1

Tôi đọc mà chỉ cần quay trở lại ok có thể không hoạt động: http: // stackoverflow .com/questions/4791499/jquery-doesnt-call-success-method-on-ajax-cho-rails-standard-rest-delete-answer – lulalala

+0

Tôi đã sử dụng 'format.json {head: no_content}' như tôi don ' t muốn gửi bất kỳ dữ liệu nào. Tuy nhiên, trình duyệt đã cố gắng chuyển hướng đến một url sau thành công ajax, điều đó là bất ngờ. Tôi đã thay thế nó bằng 'format.json {head: ok}' và chuyển hướng không cần thiết đã biến mất. –

0

Khi bạn thực hiện truy vấn của mình, nó có thể trả lại một số mã cho biết nó đã thực hiện thành công để xác nhận hàng đó đã bị xóa. Vì vậy, bạn có thể trả lại rằng chỉ để đảm bảo truy vấn cũng được thực hiện thành công cùng với cuộc gọi ajax.

+0

Phải, tôi biết nếu truy vấn của tôi thành công hay không, nhưng bạn đề xuất trả lại điều đó như thế nào? Ví dụ: format.json {"false"} hoặc hiển thị: nothing => true, hoặc ..? – 99miles

2

tôi thấy cách này ngắn hơn để thực hiện công việc:

def destroy 
    # ... your code ... 
    head :ok # this will return HTTP 200 OK to jQuery! 
end 
+0

Điều này trả về 200 đến jQuery cùng với một khoảng trống duy nhất trong reponse. jQuery không giải thích điều này như là một thành công. Vì vậy, nó sẽ trả về thành công nhưng không gọi sự gọi lại thành công. – JaeGeeTee

+0

Ồ, điều này thực sự đã được vá. Tôi đã sửa chữa! – JaeGeeTee

3

thử loại này đó là đang làm việc cho tôi

def destroy 
    ...   
    render json: {}, status: 200 
end 
Các vấn đề liên quan