- ベストアンサー
getJSONで受け取れるよう出力するには?
- 質問文章からセンセーショナルなタイトルを30文字前後で生成します。
- $.getJSONを使用してAPIからデータを取得する方法について説明します。
- 質問者が$.getJSONの第1引数を変更してデータを取得しようとしたが成功しなかった理由を解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 > 戻り値として必ず「jsonデータ」を返す ということはあり得ません。返却されているのは、あくまで「json書式のテキスト」です。 そもそも、Webサーバは「.html」なり「.gif」なり、拡張子が登録されている要求URLの場合、自動でContent-typeを付加します。ところが、「.php」のような拡張子は、戻す内容が不明なため、(サーバの種類にもよると思いますが)デフォルト動作でtext/htmlなどのContent-typeを返します。 $.getJSONが、「どうせ戻りはJSONなのだからどんなCOntent-typeが来ても無視」と設計されればそう動作するわけで、事実、初期のjQueryは$.ajaxに"json"の指定がなく、textで受けてjson.parse()するような処理がまかり通っていましたがら、明確な基準はないのです。 ただ、サーバサイドから考えたら、相手は(ひょっとして前はContent-type不要で決め打ちだった?)$.getJSONだけではなく、$.getも$.ajaxもアリで、しかもjQueryなんか勝手にバージョンがどんどん上がっていくし、他にprototype.jsなんかもあり、正しくContent-typwを返すのが鉄則です。
その他の回答 (2)
- shockatz
- ベストアンサー率80% (153/191)
$.getJSON()メソッドは、戻り値としてjsonデータを期待するため、形式が「json文字列」であることと、Content-typeが正しくセットされている必要があります。 あと。文字コードはutf-8にしないと日本語などは文字化けします。 よって、 header("Content-Type: application/json; charset=utf-8"); が必要かと。
補足
回答ありがとうございます >$.getJSON()メソッドは、戻り値としてjsonデータを期待するため、形式が「json文字列」であることと、Content-typeが正しくセットされている必要があります ・「Content-type」について教えてください ・例えば、戻り値として必ず「jsonデータ」を返す場合も、Content-typeは必須なのでしょうか? ・仮に形式が正しい「json文字列」だったとしても、「Content-type」未指定、あるいは、指定内容違いの場合には、正常動作しないのでしょうか? ・また、上記については、$.getJSON()以外だと、また別な挙動なのでしょうか?
- pa_cotta
- ベストアンサー率43% (25/58)
PHP側でjson_encode関数でjson形式に変換した値を返す(echoする)ようにすればいいです
お礼
回答ありがとうございましたー
お礼
回答ありがとうございました。 >戻り値として必ず「jsonデータ」を返すということはあり得ません >自動でContent-typeを付加します >正しくContent-typwを返すのが鉄則です ・詳細な説明ありがとうございました ・おかげで疑問が解決しました ・大変参考になりましたー