Rails: format.js или format.json или оба?
Может показаться очевидным, но все же мне не хватает базовых знаний.
Итак, внутренние контроллеры могут использоваться, или это всегда Javascript, поэтому оба они одинаковы?
Ответы
Ответ 1
В Rails 3.1 единственная разница, которую я могу заметить, заключается в том, что форматирование if является js, тогда ответ отправляется как обычный текст. Если это json, то он кодируется как json.
if format.json
format.json {
render :json => @accounts.map(&:attributes)
}
отправить сервер:
data:application/json;base64,
if format.js
format.js {
render :json => @accounts.map(&:attributes)
}
отправить сервер:
[{"id":33,"email":"[email protected]"}]
Ответ 2
json
и js
- два разных типа ответа, и они определяются как разные типы MIME в Rails
Mime::Type.register "text/javascript", :js, %w( application/javascript application/x-javascript )
Mime::Type.register "application/json", :json, %w( text/x-json application/jsonrequest )
Даже если Json можно считать подмножеством JavaScript, не все ответы на JavaScript на самом деле являются ответами Json.
Возможно, вы захотите ответить Json и Js в том же самом действии.
Например, у вас может быть действие, которое отвечает Json на вызов API и с JavaScript (возможно, с использованием RJS) на внутренний вызов Ajax.