Так просто установить jQuery Autocomplete не работает для меня, почему я странный для этого, пожалуйста, вы можете проверить, что проблема в этом?

Функция Jquery

$("#location_suggetion").autocomplete({
    autoFocus: true,
    minLength: 1,
    source: function(request,response) {
        $.ajax ({
            url: base_url+'data_check/get_location',
            data: {term: request.term},
            dataType: "jsonp",
            cache: false,
            success: function(data) {
                response( $.map( data.suggestions, function( item ) {
                    return {
                        label: item,
                        value: item
                    }
                }));    
            } 
        });
    },
});

PHP File Code

$term = $this->input->get('term');
$query = $this->db->query('SELECT * FROM `tb_cities` WHERE name LIKE "'.$term.'%" LIMIT 0,6');
$results = $query->result();
$html = '';
$html.= '[';
foreach($results as $result){
    $html.= '{ label: "'.$result->name.', '.get_country_row($result->country_id)->name.'", value: "'.$result->name.'" },';
}
$html.='];';

echo $html;

Консоль Получи мне результат

[{ label: "Rangat, India", value: "Rangat" },{ label: "Rajahmundry, India", value: "Rajahmundry" },{ label: "Rajamahendri, India", value: "Rajamahendri" },{ label: "Rajampet, India", value: "Rajampet" },{ label: "Rajendranagar, India", value: "Rajendranagar" },{ label: "Rajoli, India", value: "Rajoli" },];
0
ImBhavin95 9 Янв 2017 в 11:44

4 ответа

Лучший ответ

jsonp используется для запроса cross domain. Используйте json вместо этого. Ваша дата JSON в консоли неверна, проверьте здесь. Чтобы преобразовать массив в строку JSON, используйте json_encode. Измените свой PHP-код на это:

$term = $this->input->get('term');
$query = $this->db->query('SELECT * FROM `tb_cities` WHERE name LIKE "'.$term.'%" LIMIT 0,6');
$results = $query->result();

$html= array();$i=0;

foreach($results as $result){
    $html[$i]['label']=$result->name.', '.get_country_row($result->country_id)->name;

  $html[$i]['value']=$result->name;
$i++;
}
echo json_encode($html);

Это может быть использовано напрямую, нет необходимости конвертировать в jquery части, так как структура уже совпадает.

2
Suchit kumar 9 Янв 2017 в 09:38

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

// This is valid
[
  { label: "Rajoli, India", value: "Rajoli" }
]

//this is invalid
[
  { label: "Rajoli, India", value: "Rajoli" },
]

Вместо того, чтобы создавать его самостоятельно, вы можете использовать функцию json_encode для разбора массива php в json

foreach($results as $result){
    $data[] = [
               "label" => $result->name.', '.get_country_row($result->country_id)->name, 
               "value" =>$result->name
    ];
}
//Now parse to json
echo json_encode($data);

Вы также можете решить, какая сторона делает правильное форматирование {"label": "some string", "value": "data"}

Вторая проблема может быть связана с тем, что вы пытаетесь $.map пометить и присвоить объектам значение

$("#location_suggetion").autocomplete({
    autoFocus: true,
    minLength: 1,
    source: function(request,response) {
        $.ajax ({
            url: base_url+'data_check/get_location',
            data: {term: request.term},
            dataType: "json", // This is right
            cache: false,
            success: function(data) {
                response( data); // already mapped in backend
            } 
        });
    },
});
1
Mikołaj Woźniak 9 Янв 2017 в 09:38

Преобразовать Array в Json

$term = $this->input->get('term');
$query = $this->db->query('SELECT * FROM `tb_cities` WHERE name LIKE "'.$term.'%" LIMIT 0,6');
$results = $query->result();
$html = array();
foreach($results as $result){
    $html[]= array("label" => $result->name.",".get_country_row($result->country_id)->name,
                  "value" => $result->name);
}

echo json_encode($html,JSON_FORCE_OBJECT);
0
Arun Kumar 9 Янв 2017 в 09:25

Я думаю, что проблема в вашем формате JSON, возвращаемом кодом PHP. Попробуй это:

<script>
    $(function(){
        var arr = [];
        var availableTags = [];

        $.ajax({
            'url'   : 'getdata.php',
            'method': 'get',
            success : function(response){
                arr = JSON.parse(response);

                availableTags = Object.keys(arr).map(function (key) { return arr[key]; });
            },
            async   : false
        });

        $( "#tags" ).autocomplete({
            source: availableTags
        });
    });  
    </script>

Php :

 <?php
    require('connect.php');

    $getDetails = "SELECT id, concat(first_name,' ',last_name) as name FROM test.datatables_demo";
    $details    = mysqli_query($con, $getDetails);

    $response = array();
    if(mysqli_num_rows($details) > 0)
    {
        while($row = mysqli_fetch_assoc($details))
        {
            $response[$row['id']] = $row['name'];
        }
    }

    echo json_encode($response);
?>
0
Mayank Pandeyz 9 Янв 2017 в 08:48