2016-11-16 3 views
0

Я пытаюсь использовать автозаполнение с использованием класса PHP. Ниже приведен JQuery.Ответ PHP с помощью JQuery

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

Я создал ниже 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

Во-первых, можете ли вы указать, какие библиотеки/фреймворки вы используете? Во-вторых, вы должны знать, что в ваш ответ входит «echo» в PHP. Поэтому, даже если вы успешно подключитесь к БД, у вас будет «Успешное подключение к MySQL:
» в вашем результате, испортив синтаксический анализ данных JSON. Пожалуйста, рассмотрите возможность проверки ваших запросов XHR в режиме проверки Chrome, FF или даже IE и отправьте соответствующие откровения. – Cunning

+0

Вы также должны удалить закрывающий тег php (?>) В конце вашего скрипта. Это не обязательно, и на самом деле это может привести к ошибкам (например, после этого у вас есть пространство для трения, и это беспорядок с вашим json). – Scalpweb

ответ

0

Я думаю, что это более читаемым, если создать отдельную функцию для получения данных с сервера, например:

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

Во-вторых, я думаю, что проблема с возвращаемой JSON, beacuse вы указали что ваша вторая попытка с примерами данных работает.

Итак, используйте функцию вместо строки для вашего источника (потому что она более читабельна и ее легче отлаживать). После этого вы должны отладить исходный ответ getJSON и отформатировать его в соответствии с autocomplete format.

0

спасибо за все ваши входы. Я получил ошибку. Это происходило, когда у меня было другое эхо - успешное соединение с MySQL - в одном из классов. json находил трудным отправить всю дату. Я прокомментировал эту строку и отлично работал.

Смежные вопросы