JqueryのajaxメソッドでdataTypeをjsonに指定し、カーリルのAPIサービスのデータをリクエストすると、ajaxメソッドのerrorイベントが呼び出されてしまいます。その時、帰って来るエラーはparse errorです。
仕方が無いので、dataTypeをxmlにして対応しているのですが、dataTypeをjsonにしてエラーが帰って来る理由って何なのでしょうか?
一応、ajaxメソッドでdataTypeをjsonではなくjsonpにすればエラーにならず、大丈夫なのですが、jsonpではなくjsonにdataTypeを指定したいのです。
※jsonpだとcontent security policyのエラーが出てしまうため。
外部APIのデータってdataTypeをjsonにした状態では取得出来ないものなのでしょうか?
独学で誰も周りに教えてくれる人がいない環境でやって来ているので、いろいろと基本的なことでたまにぶつかってしまいます。一応、xml形式でデータを取得することで対応は出来ているものの、そこで長くハマったためハマった原因がわからず悔しいです。。。
なぜ、json形式でリクエストするとparse errorとなるのかご存知の方がおりましたらご教授頂けると嬉しいです。よろしくお願い致します。
ちなみにカーリルのapi仕様ページはこちらです。
http://calil.jp/doc/api_ref.html
リクエスト時にはAPIの説明にある通り、オプションのformatをjsonに指定してから、ちゃんとJqueryのajaxメソッドを使用しております。
みんなの回答 2 件
外部サイトのデータをJSONで取ることはできません。JSONPにする必要があります。JSONとJSONPの違いはググって下さい。
横ですけど、カーリルのAPI仕様書見たけど、蔵書検索の結果例ってあからさまにJSONP用callback()ついた状態で書いてありますよね。
これだとJSONでパース エラーになるの当然だと思います。
Ajaxのデバッグするときは、Firebugとか各ブラウザの開発者ツールでHTTP Header見て通信結果確認しながらやりましょう...。
関連するトピックス