以下のようなコードがあります。クリックイベント(現在は'料金で並べ替える'のみ)が発生するとajaxのポストでdoajax.phpに飛び、ソートを行います。特にデータは返さずページを再読み込みしソートした配列を表示します。
しかし再読み込みしてもソートした配列が表示されません。
PHP
1//hotels.php 2// list($hotels, $pics, $tags) = $getHotelsInfo->getHotels(); 3list($hotels, $pics, $tags) = $getHotelsInfo->sortByPrice(true);
とするとソートした配列が表示されるので機能はしてます。
どこに間違いがありますか。
JS
1<?php 2//hotels.php 3ini_set('display_errors', 1); 4require_once("Hotel.php"); 5 6$hotels = ''; 7$pics = ''; 8$tags = ''; 9 10$getHotelsInfo = new Hotel(); 11list($hotels, $pics, $tags) = $getHotelsInfo->getHotels(); 12?> 13<html lang="en" dir="ltr"> 14<head> 15 <meta charset="utf-8"> 16 <title>Sample</title> 17 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 18 <style media="screen"> 19 .push { 20 display: inline-block; 21 background-color: lightblue; 22 color: #fff; 23 padding: 10px; 24 margin-bottom: 10px; 25 cursor: pointer; 26 } 27 .hotel { 28 border: solid 1px #808080; 29 margin-bottom: 10px; 30 } 31 </style> 32</head> 33 34<body> 35 <h2>これはデモです</h2> 36 <span id="sortbyprice" class="push">料金で並べ替える</span> 37 <span id="highrated" class="push">高評価</span> 38 <span id="recommended" class="push">おすすめ</span> 39 40 <div class="hotels"> 41 <?php foreach ($hotels as $hotel): ?> 42 <div class="hotel"> 43 <div class="hotelpics"> 44 <?php foreach ($pics as $pic): ?> 45 <?php if (($hotel['hotel_id'] == $pic['hotel_id']) && ($hotel['country_code'] == $pic['country_code'])): ?> 46 <div class="image"> 47 <p> 48 <?php echo $pic['pic']; ?> 49 </p> 50 </div> 51 52 <?php endif ?> 53 54 <?php endforeach ?> 55 </div> 56 <div class="hotelinfo"> 57 <h2 class="hotelname"> 58 <?php echo $hotel['hotel_name'] ;?> 59 </h2> 60 <div class="tags"> 61 <?php foreach ($tags as $tag): ?> 62 <?php if (($hotel['hotel_id'] == $tag['hotel_id']) && ($hotel['country_code'] == $tag['country_code'])): ?> 63 <span> 64 <?php echo $tag['tag'];?></span> 65 <?php endif ?> 66 <?php endforeach ?> 67 </div> 68 <div class="rating"> 69 <span class="rateposition"><span>非常に良い</span><span class="rate"> 70 <?php echo $hotel['rate'] ;?></span></span> 71 </div> 72 <div class="price"> 73 <span class=""> 74 <?php echo $hotel['price']; ?>/1泊(1人)</span> 75 </div> 76 </div> 77 </div> 78 <?php endforeach ?> 79 </div> 80 81</body> 82<script> 83 $(function() { 84 $('#sortbyprice').on('click', function() { 85 var action = $(this).attr('id'); 86 console.log(action); 87 $.post("doajax.php", { 88 action:action 89 }, function(data) { 90 console.log(data); 91 location.reload(); 92 }); 93 94 }); 95 }); 96</script> 97</html>
PHP
1<?php 2//Hotel.php 3ini_set('display_errors', 1); 4class Hotel 5{ 6 private $hotels = ''; 7 private $pics = ''; 8 private $tags = ''; 9 10 public function __construct() 11 { 12 $this->hotels = array(); 13 $this->pics = array(); 14 $this->tags = array(); 15 $this->getDefalutHotels(); 16 } 17 //ホテルの情報を受け取る 18 public function getHotels() 19 { 20 return array($this->hotels, $this->pics, $this->tags); 21 } 22 23 /*falseの場合は配列を返さない。また原則としてホテルの情報を受け取るのは 24 getHotels()のみ。その他のメソッドはホテルを取得、ソートして変数に代入するのみ 25 また全てのメソッドはDBからデータを取得したと仮定している。*/ 26 27 //1番初めにhotels.phpに来た時に表示するホテル情報 28 private function getDefalutHotels($return = false) 29 { 30 $this->hotels = array( 31 array('hotel_id' => '1', 'country_code'=>'PHL', 'hotel_name'=>'SARROSAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'500', 'rate'=>7), 32 array('hotel_id' => '2', 'country_code'=>'PHL', 'hotel_name'=>'SPAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'100', 'rate'=>8), 33 array('hotel_id' => '3', 'country_code'=>'PHL', 'hotel_name'=>'MATTHERホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'0', 'rate'=>7.5) 34 ); 35 $this->pics = array( 36 array('hotel_id' => '1', 'country_code'=>'PHL', 'pic'=>'hotel_idが1の画像です'), 37 array('hotel_id' => '2', 'country_code'=>'PHL', 'pic'=>'hotel_idが2の画像です'), 38 array('hotel_id' => '3', 'country_code'=>'PHL', 'pic'=>'hotel_idが3の画像です') 39 ); 40 $this->tags = array( 41 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 42 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 43 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 44 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'キャンセル無料'), 45 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 46 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 47 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 48 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 49 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'朝食付き'), 50 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'キャンセル無料') 51 ); 52 53 if ($return) { 54 return array($this->hotels, $this->pics, $this->tags); 55 } 56 } 57 58 public function sortByPrice($return = false) 59 { 60 $this->hotels = array( 61 array('hotel_id' => '3', 'country_code'=>'PHL', 'hotel_name'=>'MATTHERホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'0', 'rate'=>7.5), 62 array('hotel_id' => '2', 'country_code'=>'PHL', 'hotel_name'=>'SPAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'100', 'rate'=>8), 63 array('hotel_id' => '1', 'country_code'=>'PHL', 'hotel_name'=>'SARROSAホテル', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'500', 'rate'=>7) 64 65 ); 66 $this->pics = array( 67 array('hotel_id' => '1', 'country_code'=>'PHL', 'pic'=>'hotel_idが1の画像です'), 68 array('hotel_id' => '2', 'country_code'=>'PHL', 'pic'=>'hotel_idが2の画像です'), 69 array('hotel_id' => '3', 'country_code'=>'PHL', 'pic'=>'hotel_idが3の画像です') 70 ); 71 72 $this->tags = array( 73 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 74 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 75 array('hotel_id' => '1', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 76 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'キャンセル無料'), 77 array('hotel_id' => '2', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 78 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 79 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 80 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 81 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'朝食付き'), 82 array('hotel_id' => '3', 'country_code'=>'PHL', 'tag'=>'キャンセル無料') 83 ); 84 if ($return) { 85 return array($this->hotels, $this->pics, $this->tags); 86 } 87 } 88 89 public function recommendedHotels($return = false) 90 { 91 $this->hotels = array( 92 array('hotel_id' => '4', 'country_code'=>'PHL', 'hotel_name'=>'The Philippines hotel', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'0', 'rate'=>8), 93 array('hotel_id' => '5', 'country_code'=>'PHL', 'hotel_name'=>'Coleen Center Hotel', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'100', 'rate'=>8), 94 array('hotel_id' => '6', 'country_code'=>'PHL', 'hotel_name'=>'The very best Hotel', 'hotel_address'=>'セブ シティ, セブ', 'hotel_tel'=>'12345', 'price'=>'500' , 'rate'=>8.5) 95 ); 96 $this->pics = array( 97 array('hotel_id' => '4', 'country_code'=>'PHL', 'pic'=>'hotel_idが1の画像です'), 98 array('hotel_id' => '5', 'country_code'=>'PHL', 'pic'=>'hotel_idが2の画像です'), 99 array('hotel_id' => '6', 'country_code'=>'PHL', 'pic'=>'hotel_idが3の画像です') 100 ); 101 102 $this->tags = array( 103 array('hotel_id' => '4', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 104 array('hotel_id' => '4', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 105 array('hotel_id' => '4', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 106 array('hotel_id' => '5', 'country_code'=>'PHL', 'tag'=>'キャンセル無料'), 107 array('hotel_id' => '5', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 108 array('hotel_id' => '6', 'country_code'=>'PHL', 'tag'=>'無料Wi-Fi'), 109 array('hotel_id' => '6', 'country_code'=>'PHL', 'tag'=>'後日支払い可'), 110 array('hotel_id' => '6', 'country_code'=>'PHL', 'tag'=>'宿泊施設へ直接支払い'), 111 array('hotel_id' => '6', 'country_code'=>'PHL', 'tag'=>'朝食付き'), 112 array('hotel_id' => '6', 'country_code'=>'PHL', 'tag'=>'キャンセル無料') 113 ); 114 if ($return) { 115 return array($this->hotels, $this->pics, $this->tags); 116 } 117 } 118}
PHP
1<?php 2//doajax.php 3ini_set('display_errors', 1); 4require_once("Hotel.php"); 5 6$getHotelsInfo = new Hotel(); 7$array = array(1,2); 8 9if ($_SERVER['REQUEST_METHOD'] === 'POST') { 10 if (isset($_POST['action']) && $_POST['action'] == 'sortbyprice') { 11 header('Content-Type: application/json'); 12 $getHotelsInfo->sortByPrice(); 13 //非同期通信に成功したかどうか確認するために値を返す。 14 echo json_encode($array); 15 exit; 16 } 17}
回答2件
あなたの回答
tips
プレビュー