1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jQueryでAjax通信時サーバで200を返してもdoneが実行されない

Posted at

概要

jQueryで下記のようにAjax通信をしていたときに、
サーバ側はステータスOKを返していても成功時のコールバック関数(done)
が実行されないという問題が起こったので備忘録として記載。

$.ajax({
  type: "POST",
  url: "APIのURL",
  dataType: "json",
  data: { 
    パラメータ... 
  }
})
.done(function () {
  alert("OK");
})
.fail(function () {
  alert("NG");
});

TLDR

ajaxオプションのTypeにjsonを指定してるとレスポンスが存在している & 厳格なJSONであるかチェックする。
空レスポンスを返していたのでエラーとなりfailで処理されていた。
Typeをtextにして空文字列として処理するようにした。

詳細

$.ajaxのオプションであるtypeのリファレンスを見ると
オプションの意味及びJSON指定時は下記のように書いてある。

dataType / string
サーバから返されるデータの型を指定します。
省略した場合は、jQueryがMIMEタイプなどを見ながら自動的に判別します。
指定可能な値は、次のようなものです。

"json": JSON形式のデータとして評価し、JavaScriptのオブジェクトに変換します。
"text": 通常の文字列。

APIのレスポンスは空だったのに対し、dataTypeはJSONを指定していたため、
空文字列をパースしようとしてエラー。
結果doneではなくfailが実行されていた。

対処として上記引用のtype:textを指定して空文字列として扱うと、無事doneがコールされた。

参考

http://semooh.jp/jquery/api/ajax/jQuery.ajax/options/
https://trialanderror.jp/ajax-fail/

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?