2016-11-16 18 views
0

PHPクラスを使用してオートコンプリートを使用しようとしています。以下はJQueryです。JQueryを使用したPHPの応答

$(document).ready(function() { 
$(".autocomplete").each(function() { 
    $(this).autocomplete({ 
     source: 'php/LiveSearch.php?name='+  $(this).attr('name') + '&', 
     minLength: 1, 
     appendTo: "#container" 
    }); 
}); 
}); 

私は、データベース私は、Webブラウザ上でLiveSearch.php開く

<?php 

interface IConnectInfo { 

const HOST = 'XXX.0.0.1:XXXX'; 
const UNAME = 'root'; 
const PW = 'xxx'; 
const DBNAME = 'test'; 

public static function doConnect(); 

} 

class UniversalConnect implements IConnectInfo{ 

private static $server=IConnectInfo::HOST; 
private static $currentDB=IConnectInfo::DBNAME; 
private static $user=IConnectInfo::UNAME; 
private static $pass=IConnectInfo::PW; 
private static $hookup; 

public static function doConnect() { 

    self::$hookup = mysqli_connect(self::$server, self::$user, self::$pass, self::$currentDB); 
    if(self::$hookup) { 
     echo ("Successful connection to MySQL:<br/>"); 
    } 
    elseif (mysqli_connect_error(self::$hookup)) { 

     echo ('Here is what is failed: ' .mysqli_connect_error()); 
    } 
    return self::$hookup; 

} 

} 

class LiveSearch { 

private $table; 
private $hookup; 
private $sql; 
private $name = array(); 
private $res; 
private $json; 
private $term; 



public function __construct() { 

    $this->table = "master"; 
    //create mysqli object 
    $this->hookup = UniversalConnect::doConnect(); 
    $this->doDisplay(); 
    $this->hookup->close(); 

} 

public function doDisplay() { 

    $this->term = 'g'; 

    //$this->term = $_GET['term']; 

    $this->sql = "SELECT DISTINCT(Asset) FROM $this->table where Business LIKE '%$this->term%'"; 

    try { 

     $result = $this->hookup->query($this->sql); 

     while ($row = $result->fetch_assoc()) { 

      $this->res = $row['Asset']; 
      array_push($this->name, $this->res); 

     } 

     $this->json = json_encode($this->name); 

     echo $this->json; 

     $result->close(); 


    } 
    catch(Exception $e) { 

     echo "Here's what went wrong: " .$e->getMessage(); 
    } 

} 



} 

$Business1 = new LiveSearch(); 

?> 

からデータを取得するためにLiveSearch.phpの下に作成した、それがフェッチすることで、私に正しいresults..giving適切なJSON出力を提供しますデータベースからのデータ。しかし、私がオートコンプリート検索を使用しようとすると、結果は得られません。私は結果がJQueryにはないと思ったが、他の単純なクラス(以下に示す)を作成し、そのクラスのインスタンスを作成すると、結果はオートコンプリートに現れる。 LiveSearchクラスに欠けているものがあるかどうかは不明ですが、ブラウザ上で直接LiveSearch.phpの結果を取得しています。 は、以下の事前に

class swapnil { 

public function __construct() { 

$this->display(); 

} 



public function display() { 

    $this->name = array("Swapnil"); 

    $this->json = json_encode($this->name); 

    echo $this->json; 

} 
} 

$Business = new swapnil(); 

おかげで作業している他の単純なクラスです。

+2

ブラウザからデベロッパーツールを使用して、jqueryプラグインがサーバーから実際に取得しているデータを確認しようとしましたか? – Scalpweb

+1

まず、使用しているライブラリ/フレームワークを教えてください。第二に、PHPの 'echo'があなたの応答に入っていることに気づくべきです。したがって、DBに正常に接続しても、成功したMySQLへの接続:
が結果として得られ、JSONデータの解析がうまくいかなくなります。 Chrome、FF、またはIEの検査モードでXHRリクエストを検査し、関連する啓示を投稿することを検討してください。 – Cunning

+0

スクリプトの最後に閉じるphpタグ(?>)も削除する必要があります。それは必要ではなく、実際にはエラーが発生することがあります(たとえば、後にスペースがあり、jsonで混乱します)。 – Scalpweb

答えて

0

私はあなたがたとえば、サーバーからデータを取得するために別の関数を作成する場合、それはより読みやすいと思い:

$(this).autocomplete({ 
source: function(request, response) { 
      $.getJSON("php/LiveSearch.php", { name: $('#yourInputId').val() }, response); 
     }, 
    ... 
} 

第二に、私はあなたが指摘beacuse問題は、あなたの返却JSONであることを考えますサンプルデータを使用して2回目の試行を行います。

だから、読みやすく、デバッグしやすいので、ソースの代わりに関数を使用してください。その後、getJSONソースの応答をデバッグし、autocomplete formatに一致するようにフォーマットする必要があります。

0

あなたのすべての入力に感謝します。私はエラーが発生しました。それは私が他のエコーを持っていたので起こっていました - クラスへの接続に成功しました。 jsonは日付全体を送るのが難しいと思っていました。私はその行をコメントし、うまくいった。

関連する問題