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