2017-12-11 10 views
1

私はajaxとphp jsonを使ってfacebookのようなユーザー検索システムを作ろうとしています。しかし、私は1つの問題があります。Ajaxの成功にはPHP JSONオブジェクトが必要です

Marc ZuckerbergMarc ZeynMarc Alpがあります。私は3のユーザー名が同じであるので、通常はマーク名を書くと、データからすべてのマーク名を取得する必要があります。 Like

<div class="ul">Marc Zuckerbert</div> 
<div class="ul">Marc Zeyn</div> 
<div class="ul">Marc Alp</div> 

しかし、私はすべてのマーク名を取得していないだけで、1つのマーク結果が得られます。 Chromeデベロッパーコンソールですべてのマーク名が表示されますが、HTML内には表示されません。私はajaxの成功からいくつかのコードが必要だと思う。

JS

$('body').delegate('#searchkey','keyup', function(){ 
     clearTimeout(timer); 
     timer = setTimeout(function(){ 
      var box = $('#searchkey').val(); 
      contentbox = $.trim(box); 
      var dataString = 'keys=' + contentbox; 
      if(contentbox !==''){ 
      $.ajax({ 
       type: "POST", 
       url: siteurl +"requests/search.php", 
       data: dataString, 
       dataType:"json", 
       cache: false, 
       beforeSend: function(){}, 
       success: function(data){ 
        $('.un').html(data.username); 
        $('.uf').html(data.fullname); 
       } 
      }); 
      } 
     }); 
    }); 

search.php

<?php 
include_once 'inc.php'; 
if(isset($_POST['keys'])) { 
    $keys = mysqli_real_escape_string($db, $_POST['keys']); 
    $keyRestuls = $WidGet->SearchUser($keys); 
    if($keyRestuls) { 
     // If array is in data 
    foreach($keyRestuls as $datas) { 
     $dataUsername = $datas['username']; 
     $dataUserID = $datas['fullname']; 
     $data = array(
      'username' => $dataUsername, 
      'fullname' => $dataUserID 
     ); 
     echo json_encode($data); 
} 
} 
} 
?> 

SearchUser機能は、ここで

public function SearchUser($keys){ 
     $keys = mysqli_real_escape_string($this->db, $keys); 
     $result = mysqli_query($this->db,"SELECT 
      username, 
      uid, 
      fullname FROM 
      users WHERE 
      username like '%{$keys}%' or fullname like '%{$keys}%' 
      ORDER BY uid LIMIT 10") or die(mysqli_error($this->db)); 
      while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) { 
       $data[]=$row; 
      } 
      if(!empty($data)) { 
      // Store the result into array 
       return $data; 
      } 
     } 
+0

SQLリクエストで '{$ keys}'の中括弧は何ですか? – gogaz

+0

@gogaz [あなたの質問でこの答えをチェックすることができます](https://stackoverflow.com/questions/5370426/how-does-affect-a-mysql-query-in-php) – Azzo

+0

正しいデータを取得していますか?表示されていませんか?あるいは、データをまったく入手していないのですか? – kerbholz

答えて

2

あなたのPHPスクリプトはGENERです不正な形式のJSON

{"username":"marc1","fullname":"Marc Zuckerberg"} 
{"username":"marc3","fullname":"Marc Zeyn"} 
{"username":"marc2","fullname":"Marc Alp"} 

をatingそれはあなたが代わりにindependamently

foreach($keyRestuls as $datas) 
{ 
    $dataUsername = $datas['username']; 
    $dataUserID = $datas['fullname']; 
    $data[] = array(
     'username' => $dataUsername, 
     'fullname' => $dataUserID 
    );  
} 
echo json_encode($data); 

各行を足すの配列に付加することによって、それを修正することができます。そして、あなたがする必要があります

[ 
    {"username":"marc1","fullname":"Marc Zuckerberg"}, 
    {"username":"marc3","fullname":"Marc Zeyn"}, 
    {"username":"marc2","fullname":"Marc Alp"}, 
] 

を生成shouldsあなたのJSで$data以上のループを使用することをお勧めします。$.each

function success(data) { 
    $.each(data, function(key, value) { 
     console.log(value.username + ": " + value.fullname); 
    }) 
} 
+0

これは' $ .each'のように '$("。un ").html(value.username);' right?はいの場合はなぜ私は開発者コンソールからこのエラーが表示されます。 'Uncaught TypeError:ヌルのプロパティ 'fullname'を読み取れません。 – Azzo

+0

以前に挿入されたデータを置き換えるため、' .html() 'は使用しません。編集を参照して、自分で試してみてください。私が提供したデータでエラーを実行することはありませんでした。 – gogaz

+0

Chromeのツールを使用すると、ConsoleはJSインタープリタで、Networkタブのajaxレスポンスが表示されます。 – gogaz

関連する問題