2012-09-12 13 views
24

Potrzebuję wysłać odpowiedź json zależy od danych wprowadzonych przez użytkownika na wejściu, ale nie mogę wysłać proste żądanie json.Jak wysłać prostą odpowiedź json w Rails?

Poszedłem za tym artykułem - http://paydrotalks.com/posts/45-standard-json-response-for-rails-and-jquery.

Dodany MimeType:

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

iw moim kontrolera:

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

ale ekran jest pusty, a tutaj jest kod odpowiedzi od fiddler2 kiedy składa się uzyskać odpowiedzi do tego działania:

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 

Co robię źle?

+1

Na pewno ponownie uruchomić aplikację po wydaniu mime_types.rb? Upewnij się, że uzyskujesz dostęp do akcji za pomocą adresu URL z końcówką '.jsonr' na końcu:' http: // localhost: 3000/checkname.jsonr'. – jdoe

+0

@ yeah, yeah. masz rację. Czy możesz zajrzeć tutaj http://stackoverflow.com/questions/12382680/how-to-send-json-response-from- controller- to-jquery-and-inspect-it - właśnie dlatego muszę wysyłać prośby json. – MID

+0

Gdzie dokładnie mam rację? :) Czy rozwiązałeś problem, czy nadal istnieje? Wypróbowałem twój kod i wskazując przeglądarce na http: // localhost: 3000/checkname.jsonr' daje mi odpowiedź JSON (application/json). – jdoe

Odpowiedz

32

Nie jestem pewien co do czynienia z niestandardowym MIME, ale jak dla renderowania JSON, to powinno działać:

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 

również może pomóc, jeśli państwa, której wersji Ruby i Rails, którego używasz.

+4

Nie wiem dlaczego, ale twój kod nie działa dla mnie Moja wersja działa 'render: json => { : status =>: ok, : message => "Sukces!", : html => "... wstaw html ..." } ' – MID

+0

@MID czy możesz dołączyć' response_to: html,: json' na górze kontrolera? – Chris

11

I zazwyczaj użyć tej metody, aby powrócić json danych:

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

to jest całkiem proste! –

1

jeden prosty sposób to:

def my_action 

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

end 
Powiązane problemy