2013-07-20 6 views
0

Я возвращаю закодированный массив JSON: echo(json_encode($data)); из php, и я бы хотел, чтобы он заполнил поле запроса из автозаполнения JQuery. Я использую это:JQuery Autocomplete, заполняется данными из pHp json

$("#field").autocomplete({ 
      source : "SearchTest.php", 
      maxLength: 5 
     }); 

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

Edit: Измененный источник на сообщение:

$("#field").autocomplete({ 
      source : function(request, response) { 
       $.post("SearchTest.php", request, response); 
      }, 
      maxLength : 5 
     }); 

Получение этой ошибки в настоящее время:

Uncaught TypeError: Cannot use 'in' operator to search for '1240' in 
Notice: Undefined index: field in /.../SearchTest.php on line 25 

Line 25: $whatTheyWantToSearch = $_POST['field'];

+0

Какая ошибка возникает у вас? Можете ли вы вставить свой PHP-код, ваш JS-код кажется ОК. – m4t1t0

+0

Нет ошибок. Я просто понял, что ничего не посылаю в SearchTest.php. Как отправить сообщение на сервер и загрузить JSON для заполнения автозаполнения? – John

+0

Не могли бы вы показать мне свой php-код? – m4t1t0

ответ

3

Попробуйте использовать ajax

var searchRequest = null; 
$("#field").autocomplete({ 
    maxLength: 5, 
    source: function(request, response) { 
     if (searchRequest !== null) { 
      searchRequest.abort(); 
     } 
     searchRequest = $.ajax({ 
      url: 'SearchTest.php', 
      method: 'post', 
      dataType: "json", 
      data: {term: request.term}, 
      success: function(data) { 
       searchRequest = null; 
       response($.map(data.items, function(item) { 
        return { 
         value: item.name, 
         label: item.name 
        }; 
       })); 
      } 
     }).fail(function() { 
      searchRequest = null; 
     }); 
    } 
}); 

JSON Пример ответа в SearchTest.php

<?php 
header('Content-type: application/json'); 
echo '{"items":[{"name":"Ashok"},{"name":"Rai"},{"name":"Vinod"}]}'; 
?> 

Demo Fiddle

Remote JSONP Demo

+0

Не работает .... – John

+0

Сохраняет функцию .fail – John

+0

Это означает, что ответ не в правильном формате 'JSON' из SearchTest.php, ответ обновлен, добавлен' метод: 'post', ' 'JSON' и Demo Fiddle –

1

правильный формат JSON для этого от PHP:

<?php 
    echo '[ {"name1":"val1"},{"name2":"val2"} ]'; 
?> 

От Js Wich означает [] -array из {} объектов.

В моем случае для autocomlete widjet это работает отлично:

$response="["; 
    while($row = $res->fetch_assoc()){ 
     if($response !="[")$response.=","; 
     $response.='{"label":"'.$row["fio"].'","value":"'.$row["id"].'"}'; 
    } 
    $response.="]"; 

    echo $response; 
0

Somthing как это лучший способ. json_encode все работает для вас.

$result = $_mysqli->query(...); 
    $rs = array(); 
    $pos = 0; 
    while($row = $result->fetch_assoc()){ 
     $rs[$pos]["n1"] = $row["n1"]; 
     $rs[$pos]["n2"] = $row["n2"]; 
     ... 
     $rs[$pos++]["nn"] = $row["nn"]; 

    } 
    header('Content-type: application/json'); 
    echo json_encode($rs); 
Смежные вопросы