jquery автозаполнение удаленного источника пробовал ВСЕ !!но ничего хорошего - PullRequest
0 голосов
/ 15 ноября 2011

Я пытался реализовать функцию автозаполнения JQuery UI .. и основной HTML-код точно такой же, как дано на http://jqueryui.com/demos/autocomplete/#remote

Я перепробовал все комбинации / фрагменты кода для "search.php", такие как -

1)

<?php 

if ( !isset($_REQUEST['term']) )
    exit;

// connect to the database server and select the appropriate database for use
$dblink = mysql_connect('localhost', 'root', '') or die( mysql_error() );
mysql_select_db('research');

$rs = mysql_query('select uname,email,password from login where uname like "'. mysql_real_escape_string($_REQUEST['term']) .'%" order by uname asc limit 0,10', $dblink);

// loop through each zipcode returned and format the response for jQuery
$data = array();
if ( $rs && mysql_num_rows($rs) )
{
    while( $row = mysql_fetch_array($rs, MYSQL_ASSOC) )
    {
        $data[] = array(
            'label' => $row['uname'] .', '. $row['password'] .' '.$row['uname'] ,
            'value' => $row['uname']
        );
    }
}

// jQuery wants JSON data
echo json_encode($data);
flush();
?>

2)

<?php 
include("includes/connect.php");

$query = "SELECT uname from login WHERE uname LIKE '%" . addslashes($_GET['term']) . "%'";

$result = mysql_query($query);

while($row = mysql_fetch_assoc($result)) {

foreach($row as $val)
    $tab[] = $val;

}

print json_encode($tab);
?>

3)

<?php

include("includes/connect.php");

$term = $_REQUEST['m']; // where name of the text field is 'm'
$query = "SELECT * FROM login WHERE uname LIKE '%$term%'";
$result = $mysqli->query($query);
$arr = array();
while($obj = $result->fetch_assoc()) {
      $arr[] = $obj['nome'];
}

echo json_encode($arr);

?>

Но все равно ничего не работает !! то есть, когда я набираю текстовое поле для автозаполнения, результаты не отображаются. в чем может быть ошибка? Есть ли альтернативные решения? Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 26 января 2017

Переменная, которую вы передаете в json_encode, должна быть массивом строк.например, ["red", "green", "blue"] или массив литералов объекта, например, [{"value": "red"}, {"value": "green"}, {"value": "blue"}]

Каждый раз, когда в цикле вам нужно добавить элемент к существующим элементам.

Во всех трех фрагментах кода я замечаю, что вы присваиваете текущий элемент переменной массива,вместо того, чтобы добавить его.Когда цикл завершится, единственным элементом в вашем массиве будет элемент, последний раз обработанный циклом.

Так что, если то, что вы вводите в поле, не соответствует этому одному элементу, автозаполнение ничего не показывает.

Вот мой PHP-код для построения массива строк перед отправкой его обратно в файл, который сделал запрос.

    $fetchedArtists = $db->query($queryToGetArtists );

    $json = '[';
    $first = true;

    while($row = $fetchedArtists->fetch_assoc())
    {
        if (!$first) 
        {
            $json .=  ',';
        } 
        else 
        {
            $first = false;
        }

        $artist = $row['artistName'];     
        $json .= '{"value":"'.$artist.'"}';
    }
    $json .= ']';
    echo $json;
...