-
ID:GqTxFb さんの質問

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 件

ID:b4gznZ さんの回答

外部サイトのデータをJSONで取ることはできません。JSONPにする必要があります。JSONとJSONPの違いはググって下さい。

ID:GqTxFb

XMLは取得出来るけどJSONは取得出来ないのですね。。。
「出来ない」ということがわかっただけでもスッキリしました^^

ID:GqTxFb

書き忘れていたみたいですが、chrome extensionを作っていて、外部のサイトにアクセスする際にはmanifest.jsonで予め、そのサイトのurlを記述しておけば、クロスオリジンうんたらの制約を回避出来るので、xmlのデータは外部サイトでも取得可能なのです。

ただ、jsonpだとなぜか、Googleさんにエラーを出されてしまうのです。。。

ID:YCjH2d さんの回答

横ですけど、カーリルのAPI仕様書見たけど、蔵書検索の結果例ってあからさまにJSONP用callback()ついた状態で書いてありますよね。

これだとJSONでパース エラーになるの当然だと思います。

Ajaxのデバッグするときは、Firebugとか各ブラウザの開発者ツールでHTTP Header見て通信結果確認しながらやりましょう...。

ID:GqTxFb

>HTTP Header見て通信結果確認しながらやりましょう...。
なるほど。。。めっちゃ、console.logでerrorオブジェクトが保有する値を出力して確認してました。。次、そうやってみます!

>JSONP用callback()ついた状態で書いてありますよね。
>これだとJSONでパース エラーになるの当然だと思います。

jsonpで取れるのは確認済みだったのですが、
formatでjsonかxml指定が出来るということなので、
jsonでデータを取れるのだと思ってました。

そういうことでは無いんですね。。。

最終更新日:2013-09-17 (13,663 views)

関連するトピックス

ページ上部に戻る