2017-01-09 3 views
0

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

Jquery Function

$("#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; 

Console Get me Result

[{ 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

Любые ошибки в консоли? Вызывается ли вызов ajax и возвращается со статусом 200 (OK)? –

+0

Ошибок в консоли и правильного возврата @MoshFeu – ImBS

+1

Ваши данные json неверны в консоли. –

ответ

2

jsonp используется для заказа cross domain. Вместо этого используйте json. Ваша дата JSON на консоли неверна. here. Чтобы преобразовать массив в строку 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 части, как структура уже соответствие.

+0

Я стараюсь, но тот же вывод – ImBS

+0

@BhavinSasapra и что это за выход. –

+0

console получить мне вывод и отобразить правильный результат, но предложения не придут. – ImBS

0

Я думаю, что проблема в вашем формате 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

Получите мне консольную ошибку SyntaxError: Неожиданный токен l в JSON в позиции 3 – ImBS

1

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

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

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

Insteadof создать его самостоятельно вы можете использовать функцию 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 
      } 
     }); 
    }, 
}); 
+0

, пожалуйста, сообщите мне, почему это недействительно? – ImBS

+0

просто указывая на json rfc https://tools.ietf.org/html/rfc7159 –

+0

Благодарим за ответ, но если я использую простой источник в этом формате, это отлично работает. – ImBS

0

Conver 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

Я пытаюсь, но тот же вывод – ImBS