電子書籍の厳選無料作品が豊富!

■前提
・$.getJSONでAPIからデータ取得するサンプルがあります
・この時、第1引数のURLを叩くと、データが表示されます
$.getJSON('http://hoge … &callback=?')
.error( ajaxError )
.success(function( data ){
・動作確認のため、「第1引数のURLで表示されたデータ」を取得(コピペ)して、「piyo.php」としてアップロードしてみました

■質問
・$.getJSON第1引数を「piyo.php」へ変更すると、同じようにデータ取得できると思ったのですが、うまくいきません
・何故でしょうか?
・「json値」をサーバが返すようにすれば良いのでしょうか?
・それはどうやるのでしょうか?
・「echo json_encode?」「header('Content-Type:?」それとも、拡張子がjsonじゃないといけないのでしょうか?

A 回答 (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を返すのが鉄則です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>戻り値として必ず「jsonデータ」を返すということはあり得ません
>自動でContent-typeを付加します
>正しくContent-typwを返すのが鉄則です

・詳細な説明ありがとうございました
・おかげで疑問が解決しました
・大変参考になりましたー

お礼日時:2013/06/10 16:12

$.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()以外だと、また別な挙動なのでしょうか?

補足日時:2013/06/08 08:52
    • good
    • 0

PHP側でjson_encode関数でjson形式に変換した値を返す(echoする)ようにすればいいです

    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/06/08 08:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!