サーバからのレスポンスのHTTPステータスコードは200のはずなのにAngularJSの$httpの.errorコールバックが呼び出される
Jqueryのバージョンは1.9, AngularJSのバージョンはv1.2.12。
詰んだ点
Railsでは
render :status => 600
などのようにHTTPステータスコードを制御できる。
だから、
def update
render :status => 200
end
と書いておけば
angularJS側
$http({ method: 'PATCH', url: '/books/'+id, data: data })
.success(function(data, status) {
/* some process */
})
.error(function(data, status)) {
/* some process */
};
このangularJSのコードのように$httpメソッドでupdateアクションのurlへのリクエストを送ったら、
.successが呼び出されると考えていたのだが、
.errorが呼び出されていて、.error内でリクエストステータスコードをconsole.logなどで出力してみても
200なので困った。
解決策
def update
# render :status => 200
render :json => { :status => 200 }, :status => 200
end
どうやらAngularJSはJSONの中で:statusを探しているみたいなのでJSONの中にきちんと:statusのキーを含めてあげる必要があるようです。