###前提・実現したいこと
RESTサーバと通信するフロントを実装しています。
記事をPOSTで送信するajax通信で、ステータスコード200が返っているのにerror側のメソッドが実行されてしまいます。
フロント:localhost:3000
サーバ:localhost:8084
CORS許可設定済
###発生している問題・エラーメッセージ
下記コードを実行すると、consoleに'post error'と表示される。
コンソールに表示されたerrorオブジェクトを見ると、きちんとstatusCode:200が返ってきている。
また、データベースに送信したパラメータが保存されているので、サーバーは正常動作を返していると思われます。
###該当のソースコード
問題のjavascript
javascript
(function ($) { $(function () { //記事を作成 $('#ex-button').click(()=> { var param = { userId: 'admin', contents: 'test' }; var SERVER_URL = 'http://localhost:8084'; $.ajax({ type: 'POST', url: SERVER_URL +'/api/article/create', data: JSON.stringify(param), contentType: 'application/json', dataType: 'JSON' }).done(function (response) { console.log('post done'); console.log(response); }).fail(function(error){ console.log('post error'); console.log(error); }); }) }) })(window.jQuery);
アクセス先のコントローラ
java
//CORS許可設定済 @RequestMapping("/api/article") @RestController public class ArticleController { @Inject private ArticleServiceSpec articleServiceSpec; @RequestMapping("/create") @ResponseStatus(code = HttpStatus.OK) public void createArticle(@RequestBody ArticleDto dto) { articleServiceSpec.createArticle(dto); } @RequestMapping("/timeline/{userId}") public List<ArticleDto> getTimeline(@PathVariable("userId") String userId) { return articleServiceSpec.getTimeline(userId); } }
サーバー側のエラーログには何も出ていません
###試したこと
$.getは正常に動作します
javascript
(function ($) { $(function () { var SERVER_URL = 'http://localhost:8084'; $.ajax({ type: 'GET', url: SERVER_URL + '/api/article/timeline/admin', data: null, contentType: 'application/json', dataType: 'JSON' }).done(function (response) { console.log('done!'); console.log(response); }).fail((error)=> { console.log('error!'); console.log(error); }); }) })(window.jQuery);
結果:console.logに’done!’と表示される
done/failではなくthen/catchメソッドを使って実装しても効果なし(ステータスコード200でcatch側のメソッドが実行される)
###補足情報(言語/FW/ツール等のバージョンなど)
jQuery 2.2.3
java8 spring boot 1.3.0
まだ回答がついていません
会員登録して回答してみよう