以下のコードを実行するとconsole.log()の部分で取得できた入れsつが表示されず、空の配列が表示されます。
質問❶
書く位置が悪いのでしょうか。通信がまだ終了していないということでしょうか。
質問❷
console.log()をした際、表示がPHPファイルの中の$hotelsを受け取る時だけ
[Object, Object, Object] (3)
となり
$pics,$tagsの時は
[{hotel_id: "1", country_code: "PHL", pic: "hotel_idが1の画像です"}, {hotel_id: "2", country_code: "PHL", pic: "hotel_idが2の画像です"}, {hotel_id: "3", country_code: "PHL", pic: "hotel_idが3の画像です"}]
のようになります。これはなぜでしょうか。
JS
1<script> 2 $(function() { 3 var array = []; 4 var hotels = []; 5 var hotelpics = []; 6 var hoteltags = []; 7 8 // 関数からは$.postの結果をreturnする 9 function pics() { 10 return $.post('sampleAjax.php', { 11 kind: 'pics' 12 }); 13 }; 14 15 function tags() { 16 return $.post('sampleAjax.php', { 17 kind: 'tags' 18 }); 19 }; 20 21 $('#sortbyprice').on('click', function() { 22 $.post('sampleAjax.php', { 23 kind: 'hotels' 24 }, function(result) { 25 hotels = result; 26 pics().done(function(result) { 27 //ここでresultコンソールすると配列が表示される 28 hotelpics = result; 29 }); 30 tags().done(function(result) { 31 //ここでresultコンソールすると配列が表示される 32 hoteltags = result; 33 }); 34 //空のの値が表示される 35 console.log(hotels); 36 console.log(hotelpics); 37 console.log(hoteltags); 38 }); 39 return false; 40 }); 41 }); 42</script>
PHP
1<?php 2//返すデータ 3//以下の配列はDBから取得したものであると仮定する。 4//ホテルの基本情報(値段でソートした設定) 5$hotels = array( 6 array('hotel_id' => '1', 'country_code'=>'PHL', 'hotel_name'=>'SARROSAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'30'), 7 array('hotel_id' => '2', 'country_code'=>'PHL', 'hotel_name'=>'SPAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'40'), 8 array('hotel_id' => '3', 'country_code'=>'PHL', 'hotel_name'=>'MATTHERホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'50') 9); 10 11//$hotelsに含まれているそれぞれのホテルの画像(DBの設定によりホテルの数と必ず一致する。今回はホテルが3つなのでこちらも同じ) 12$pics = array( 13 array('hotel_id' => '1', 'country_code'=>'PHL', 'pic'=>'hotel_idが1の画像です'), 14 array('hotel_id' => '2', 'country_code'=>'PHL', 'pic'=>'hotel_idが2の画像です'), 15 array('hotel_id' => '3', 'country_code'=>'PHL', 'pic'=>'hotel_idが3の画像です') 16); 17//ホテル側が自由に複数持つことができるタグ。 18$tags = array( 19 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 20 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 21 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 22 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'キャンセル無料'), 23 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 24 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 25 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 26 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 27 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'朝食付き'), 28 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'キャンセル無料') 29); 30 31/* 32表示に関して 33HTML .hotel .nameクラスは $hotelsのhotel_name 34HTML .hotel .priceクラスは $hotelsのhotel_price 35HTML .hotel .imgクラスは $$picsのpic 36HTML .tags .tagクラスは $tagsのtag 37*/ 38// $allOfHotelsInfo = array($hotels,$pics,$tags); 39 40if ($_SERVER['REQUEST_METHOD'] === 'POST') { 41 if (isset($_POST['kind']) && $_POST['kind'] == 'pics') { 42 header('Content-Type: application/json'); 43 echo json_encode($pics); 44 exit; 45 } elseif (isset($_POST['kind']) && $_POST['kind'] == 'tags') { 46 header('Content-Type: application/json'); 47 echo json_encode($tags); 48 exit; 49 } elseif (isset($_POST['kind']) && $_POST['kind'] == 'hotels') { 50 header('Content-Type: application/json'); 51 echo json_encode($hotels); 52 exit; 53 } 54}
回答1件
あなたの回答
tips
プレビュー