JQuery UI автозаполнения AJAX не заполняет раскрывающийся список - PullRequest
4 голосов
/ 28 февраля 2012

Мне нужна помощь в этом, я не вижу, в чем проблема.

Когда я устанавливаю источник для автозаполнения в html-файле, он работает нормально, когда я вывожу те же значения источника или базы данных в ajax.php и возвращаю его через ajax, он не работает. В чем может быть проблема? Помогите пожалуйста.

HTML:

    <!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Auto complete</title>
        <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
        <script type="text/javascript" src="jquery-ui-1.8.18.custom.min.js"></script>
        <link rel="stylesheet" media="all" type="text/css" href="jquery-ui-1.8.custom.css" />
        <style type="text/css">
            .ui-autocomplete-loading {
                background: url("images/loader.gif") no-repeat scroll right center white;
            }
        </style>
        <script type="text/javascript">
            jQuery(document).ready(function($){                       
                $("#ac").autocomplete({
                    minLength: 2,
                    //source: [{"value":"Some Name","id":1},{"value":"Some Othername","id":2}]
                    source: function( request, response){
                        $.ajax({
                            type: 'GET',
                            url: 'ajax.php',
                            data: {
                                'term':request.term
                            },
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function(data){
                                console.log('Success : ' + data);
                            },
                            error: function(message){
                                alert(message);
                            }
                        });
                    },
                    select: function( event, ui ) {
                    }
                });
            });
        </script>
    </head>
    <body>
        <input type="text" id="ac" name="ac" size="100" />
    </body>
</html>

и мой файл ajax.php:

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'test_db';

$server = mysql_connect($dbhost, $dbuser, $dbpass);
$connection = mysql_select_db($dbname, $server);

$term = $_GET['term'];

$qstring = "SELECT user_id,tName FROM `csv_data` WHERE tName LIKE '%" . $term . "%'";
$result = mysql_query($qstring);

$return_arr = array();

$i = 0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {//loop through the retrieved values
    $row_a = array();
    if ($row['tName'] != null) {
        $i++;
        $row_a['value'] = ($row['tName']);
        $row_a['id'] = (int) $i;
        array_push($return_arr, $row_a);
    }
}

mysql_close($server);

header("Content-type: text/x-json");

/*$my_arr = array(
    array("value" => "Some Name", "id" => 1),
    array("value" => "Some Othername", "id" => 2)
);*/

//echo json_encode($return_arr);
print json_encode($return_arr);

//print json_encode($my_arr);

Это ответ от firebug (генерируется из базы данных).

[{"value":"4 erste Spiele","id":1},{"value":"Meine ersten Spiele \"Blinde Kuh\"","id":2},{"value":"4 erste Spiele","id":3},{"value":"Meine ersten Spiele \"Blinde Kuh\"","id":4},{"value":"4 erste Spiele","id":5},{"value":"Meine ersten Spiele \"Blinde Kuh\"","id":6},{"value":"Maxi Kleine Spielewelt","id":7}]

1 Ответ

6 голосов
/ 28 февраля 2012

Параметр response на самом деле является обратным вызовом, который вам нужно вызвать - передать ему свои данные - чтобы отобразить всплывающее меню результатов.Просто позвоните в обратном вызове «success»:

source: function(request, response) {
    $.ajax({
        ...
        success: function(data) {
            // pass your data to the response callback
            response(data);
        },
        error: function(message) {
            // pass an empty array to close the menu if it was initially opened
            response([]);
        }
    });
},
...