Не обработан ответ javascript с кодом состояния 4xx - PullRequest
0 голосов
/ 04 сентября 2011

В моем контроллере я делаю следующее:

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 был выполнен?

Ответы [ 2 ]

0 голосов
/ 01 октября 2011

Если что-то кроме 200 вызывает проблемы, почему бы просто не вернуть это.Во всяком случае, никто не увидит код ответа, если он не копается в заголовках HTTP.сделать вещи слишком сложными для себя.

В конце концов, HTTP-запрос был успешным, поэтому HTTP-ответ 200 действительно очень уместен.

0 голосов
/ 04 сентября 2011

Каждый код состояния имеет значение и 200 означает, что запрос был успешно выполнен.Когда вы получаете другие коды 4xx или 5xx, это означает, что там есть какая-то ошибка, и скрипт не запустил / не вернул успешный ответ.В этом случае вам не следует ожидать того же результата, однако вы можете обработать этот случай в своем коде Javascript и отобразить какое-то значимое сообщение, если с запросом произошло что-то неправильное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...