2012-09-12 18 views
24

Tôi cần gửi phản hồi json phụ thuộc vào dữ liệu người dùng nhập vào trong đầu vào, nhưng tôi không gửi yêu cầu json đơn giản.Làm thế nào để gửi phản ứng json đơn giản trong Rails?

Tôi đã theo dõi bài viết này - http://paydrotalks.com/posts/45-standard-json-response-for-rails-and-jquery.

Added Loại Mime:

Mime::Type.register_alias "application/json", :jsonr, %w(text/x-json) 

và trong điều khiển của tôi:

def checkname 
    respond_to do |format| 
    format.jsonr do 
     render :json => { 
     :status => :ok, 
     :message => "Success!", 
     :html => "<b>congrats</b>" 
     }.to_json 
    end 
    end 
end 

nhưng màn hình trống và đây là mã phản hồi từ Fiddler2 khi tôi sáng tác GET đối phó với hành động này:

HTTP/1.1 406 Not Acceptable 
    Content-Type: text/html; charset=utf-8 
    X-UA-Compatible: IE=Edge 
    Cache-Control: no-cache 
    X-Request-Id: 14a8467908d9ce322d054607efdacf92 
    X-Runtime: 0.011000 
    Content-Length: 1 
    Connection: keep-alive 
    Server: thin 1.4.1 codename Chromeo 

Tôi đang làm gì sai?

+1

Bạn có chắc bạn khởi động lại ứng dụng của bạn sau khi ấn bản của mime_types.rb? Và đảm bảo rằng bạn đang truy cập hành động của mình qua url với '.jsonr' ở cuối, như: http: // localhost: 3000/checkname.jsonr'. – jdoe

+0

@jdoe, vâng. bạn đúng rồi. Bạn có thể xem tại đây http://stackoverflow.com/questions/12382680/how-to-send-json-response-from-controller-to-jquery-and-inspect-it - đây là lý do tại sao tôi cần phải gửi yêu cầu json. – MID

+0

Tôi chính xác ở đâu? :) Bạn đã giải quyết được vấn đề hay nó vẫn tồn tại? Tôi đã thử mã của bạn và trỏ trình duyệt của tôi tới 'http: // localhost: 3000/checkname.jsonr' cho tôi phản hồi JSON (application/json). – jdoe

Trả lời

32

Không chắc về đối phó với MIME tùy chỉnh, nhưng như để render JSON, điều này sẽ làm việc:

def testme 
    respond_to do |format| 
    msg = { :status => "ok", :message => "Success!", :html => "<b>...</b>" } 
    format.json { render :json => msg } # don't do msg.to_json 
    end 
end 

Ngoài ra nó có thể giúp đỡ nếu bạn nêu phiên bản Ruby và Rails bạn đang sử dụng.

+4

tôi không biết tại sao, nhưng mã của bạn không hoạt động đối với tôi. Phiên bản của tôi đang hoạt động 'render: json => { : status =>: ok, : message => "Thành công!", : html => "... chèn html ..." } ' – MID

+0

@MID bạn có bao gồm' respond_to: html,: json' ở đầu bộ điều khiển của bạn không? – Chris

11

Tôi thường sử dụng phương pháp này để trả lại dữ liệu json:

msg = {:token => token, :courseId => courseId} 
render :json => msg 
+0

điều này khá đơn giản! –

1

Một cách đơn giản là:

def my_action 

render :json => {:name => "any name"} 

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