getJSONで受け取れるよう出力するには?
- 質問文章からセンセーショナルなタイトルを30文字前後で生成します。
- $.getJSONを使用してAPIからデータを取得する方法について説明します。
- 質問者が$.getJSONの第1引数を変更してデータを取得しようとしたが成功しなかった理由を解説します。
- ベストアンサー
getJSONで受け取れるよう出力するには?
■前提 ・$.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じゃないといけないのでしょうか?
- re97
- お礼率80% (601/744)
- AJAX
- 回答数3
- ありがとう数2
- みんなの回答 (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する)ようにすればいいです
お礼
回答ありがとうございましたー
関連するQ&A
- $.getJSONにJSON.stringifyを
$.getJSONに、JSON.stringifyした結果を指定したいのですが、どうすればよいでしょうか? ■現状 ・コンソールにJSONは出力されているのですが、$.getJSONでこのファイルを指定しても、画面真っ白です ▼index.html <script type="text/javascript" src="hoge.json"></script> <script type="text/javascript"> $.getJSON('hoge.json', function(data) { ▼hoge.json var obj =([ [略], ]); var json_text = JSON.stringify(obj); // テスト出力 console.log(json_text); ■質問 ・$.getJSONにこの出力結果(json_text)を指定するためには、どうすれば良いでしょうか? ・一旦ファイル出力しなければいけないのでしょうか? ・どうやるのでしょうか? ・AJAXでサーバ側へデータを渡してファイル出力した後、$.getJSONでその出力したファイルを指定するしかない?
- ベストアンサー
- JavaScript
- $.getJSONで複数のJSONを取得する
$.getJSON("jsonGet.php", function (result) { でJSONファイルをゲットしています。 質問「もし2つ以上のJSONファイルが必要な場合、 どのように記述すればいいのでしょうか?」 $.getJSON("jsonGet1.php", function (result1) { $.getJSON("jsonGet2.php", function (result2) { } } のように入れ子にするのでしょうか? $.getJSON命令1つで複数のJSONファイルをリターンすることは不可能でしょうか? ロジック上、2つのJSONファイルを取得してから処理を継続します。 通常、どのようにコーディングするのか教えてください よろしくお願いします。
- ベストアンサー
- JavaScript
- JSON の出力先ディレクトリの指定方法
cakePHPの初心者です。 以下のようにPHPからJSON形式で、データファイルを出力したいと考えております。 $json = new Services_JSON; $encode = $json->encode($hoge); echo $encode; ですが、出力先ディレクトリの指定の仕方が分かりません。 ご存知の方、恐れ入りますが方法を教えて頂けますでしょうか?
- ベストアンサー
- PHP
- jQueryの$.getJSONでデータを渡したい
jQueryの$.getJSONでデータを渡したいのですが、 うまくいきません。 test.js { "users": [ { "name": "aoki", "code": "0001" }, { "name": "ueno", "code": "0002" } ] } 読み込む側 $.getJSON("test.js", { "name": "John", "code": "0003" }, function(json){ alert("JSON Data: " + json.users[0].name); alert("JSON Data: " + json.users[1].name); alert("JSON Data: " + json.users[2].name); }); { "name": "John", "code": "0003" }を渡しているのだから、 json.users[2].nameで、"John"が取得できると思ったのですが、 「'users.2.name' は Null またはオブジェクトではありません。」エラーになります
- ベストアンサー
- JavaScript
- PHPからJavaScriptの指定形式へ変更
PHPからJavaScriptの下記形式へ変更したいのですが、これは何と言う形式なのでしょうか? ・json? ・それともJavascriptオブジェクト? ■変更したいavaScript形式 [ ['hoge', 4.3], ['piyo', 5.6] ], ■変更元のPHPデータ Array ( [0] => 'hoge',4.3 [1] => 'piyo',5.6 )
- ベストアンサー
- JavaScript
- PHPの正規表現でHTMLタグの内容を抽出したい
jqueryでPHPにurlを渡して、そのurlの中のtitleタグの内容を抽出したいと思ってます。が、うまく行きません。 ●jquery↓ <script type="text/javascript"> function site_check(){ var url = $("#url0").val(); if(url=="") return; $.getJSON("test.php?url=" + encodeURI(url) ,function(res){ $("#title").html(res.title); }); } </script> ●test.php↓ $html=file_get_contents($_GET["url"]); preg_match_all("/<title>(.*?)<\/title>/i",$html,$html_title); header('Content-type: application/json'); echo json_encode($html_title); このコードではなにもレスポンスが帰って来ません。 もし足りない情報がありましたらご指摘ください。
- ベストアンサー
- PHP
- 【PHP,JavaScript】文字が誤変換される
以下は、プログラムの一部でJavaScriptからPHPにJSONデータを送信する処理です。 引数を渡すJavaScript側(Extjsライブラリを利用)のプログラム // Ajaxリクエスト処理 Ext.Ajax.request({ url: "php/updatedata.php", success: handleSuccess, failure: handleFailure, params: { data: Ext.util.JSON.encode(data) } // パラメータをJSON形式にして送信 }); 配列dataの中身は「data[0] = 3,data[1] = パソコン」となっています。 Ext.util.JSON.encode(data)により配列dataをJSONに変換して 受信するPHP側のプログラム:updatedata.php JavaScriptで渡したJSONを$_REQUEST['data']で受信して中身を見ると以下のようになっています。 if (isset($_REQUEST['data'])) { $tmp = $_REQUEST['data']; 【受信したJSONデータの中身】 [{"id":"3","name":"繝代た繧ウ繝ウ"}] 「パソコン」という文字列が「繝代た繧ウ繝ウ」という文字列に変換されてしまっています。 Extjs側の「Ext.util.JSON.encode」が悪いのでしょうか、それともPHP側の「$_REQUEST」が悪いのでしょうか。はたまた何か別の原因があるのでしょうか。 ちなみに、環境は以下のようになっています。 WindowsXP,Windows7(両方とも同じ結果になってしまいました。) PHP5.3.1 Ext3.3.0 以上、よろしくお願い致します。
- ベストアンサー
- JavaScript
- kimonoで取得したjsonファイルの出力
kimonoで取得したjsonファイルの出力 以下のサイトを使用してスクレイピングしたjsonファイルをphpで表示させようとしたのですが、何も表示されません。助言をお願いします。 http://www.kimonolabs.com/ //jsonファイル { "name": "kokunai", "results": { "collection1": [ { "info": "【運航概況】\n本日4日および明日5日の運航状況は、以下のとおりです。" } ] } } //php記述 <?php $request = "http://www.kimonolabs.com/api/kimonoユーザID?apikey=APIキー"//URLの中身は上記jsonファイルと同一 $response = file_get_contents($request); $results = json_decode($response, TRUE); echo $results['results']['collection1'][info]; ?>
- ベストアンサー
- PHP
- jquery PHP 値 ajax
失礼します。現在jqueryで作成した2次元配列をPHP側に渡したいのですが上手くいきません。 jquery側のコンソールで確認した際にはsuccessの処理が行われ配列の中身がjson形式で表示されるのですが、その内容をPHP側で確認しようとするとNULLが返ってきてしまいます。 何卒ご教授よろしくお願いいたします。 html側 $(function(){ // 送るデータ形式はJSONでなければ、PHP側でエラーが出る.のでJSON.stringify()でJSON形式に変換 send_data= JSON.stringify(data); // 送信処理 $.ajax({ url: "ajax.php", // 送信先のPHP type: "POST", // POSTで送る contentType: "Content-Type: application/json; charset=UTF-8", //必須ではなさそうだが、サーバ側との整合のために明示しておいた方がよい。 // dataType: 'json', //受信形式 必須ではなさそうだがサーバ側との整合のために明示しておいた方がよい。 data:send_data //JSON形式の送信データ }).success(function(data, status, xhr) { // 通信成功時の処理 console.log("success"); console.log("data ="+data); console.log("status ="+status); console.log("xhr ="+xhr); }).error(function(xhr, status, error) { // 通信失敗時の処理 console.log("error"); }).complete(function(xhr, status) { // 通信完了時の処理 console.log("fin"); }); }) }) PHP側 二通り試してみました。 <?php //php://inputはPOSTの生データを取得できる $json = file_get_contents("php://input"); //JSON形式データをPHPの配列型に変換 $data = json_decode($json); var_dump($data) ; //POSTできたデータを格納 $hoge = $_POST['data']; var_dump($hoge);
- ベストアンサー
- AJAX
- jQuery.getの引数dataで動的にするには
お世話になります。 jQuery.get()の第二引数dataによって、動的にJSONを取得したいです。 第一引数urlがhttp://test.com 第二引数が{id:1,name:tanaka}としてgetした場合 http://text.com?id=1&name=tanaka とリクエストしてると考えてよいのでしょうか。 ある大手サイトでget()時、dataによって取得できるJSONが違うのですが、 そのURLの最後に拡張子がありません。 JSONは拡張子が無くても良いというのを知りましたが これはJSONの形式でそのように動的に発行しているのでしょうか。 もしくはサーブレットあたりが動いて動的にさせてるのでしょうか。 たぶんPHPとかではないですよね。 上の例でいくと http://text.com?id=2 http://text.com?id=5 http://text.com?id=15 これで取得できるのが違います。 どうなってるのかさっぱり判りません。 すみません、よろしくお願いいたします。
- 締切済み
- AJAX
お礼
回答ありがとうございました。 >戻り値として必ず「jsonデータ」を返すということはあり得ません >自動でContent-typeを付加します >正しくContent-typwを返すのが鉄則です ・詳細な説明ありがとうございました ・おかげで疑問が解決しました ・大変参考になりましたー