В моем контроллере я делаю следующее:
def publish
respond_to |format|
format.js do
if allowed_to_publish then
render :js => 'alert("successful");'
else
render :js => 'alert("error");'
end
end
end
end
Клиенты получают доступ к методам с помощью ajax-запроса.Пока это работает хорошо, единственное, что меня беспокоит, это то, что код состояния ответа всегда "200".
Когда есть ошибка и запрос не может быть выполнен, это должен быть 4xx или5xx ответ в зависимости от типа ошибки.В моем случае publish
может пойти не так, если пользователь не введет все необходимые данные.Мне кажется, правильный код состояния для этого: 412, предварительное условие не выполнено .
Теперь, когда я изменяю код состояния, он больше не выполняет JavaScript:
def publish
respond_to |format|
format.js do
if allowed_to_publish then
render :js => 'alert("successful");'
else
render :js => 'alert("error");', :status => 412
end
end
end
end
Клиент получает тот же ответ, но код состояния и больше не выполняет javascript.Заголовки ответа следующие:
Date Sun, 04 Sep 2011 12:29:58 GMT
Server Apache/2.2.14 (Ubuntu)
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.8
X-UA-Compatible IE=Edge
Cache-Control no-cache
X-Runtime 0.176543
Status 412
Strict-Transport-Security max-age=172800, includeSubDomains
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/javascript; charset=utf-8
, а тело по-прежнему равно alert("error");
.Но это не предупреждает.
Это ограничение браузера (я использую Firefox 7b ), или это можно сделать для работы с рельсами?
Должен ли явсегда использовать 200
, если я хочу, чтобы мой javascript был выполнен?