JQuery Autocompletar, poblar con datos de pHp json

Estoy devolviendo una matriz codificada JSON: echo(json_encode($data)); de php y me gustaría llenar el cuadro de sugerir de autocompletar JQuery. Estoy usando esto:

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

No estoy seguro de por qué esto no está funcionando. Después de cada pulsación de tecla, recuperaría datos y llenaría el cuadro de sugerencias con esa información, no quiero que la función autocompletar ordene y elija por mí, estoy haciendo ese lado del servidor. Es solo una lista de cadenas por ahora. Ser capaz de personalizar cómo se presentan los datos sería bueno también.

Editar: se cambió la fuente a la publicación:

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

Obteniendo este error ahora:

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

La línea 25 es: $whatTheyWantToSearch = $_POST['field'];

Intenta usar 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; }); } }); 

Ejemplo de respuesta JSON en SearchTest.php

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

Demo Fiddle

Demostración remota de JSONP

el formato json apropiado para esto de php:

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

De js que significa [] -arreglo de {} objetos.

En mi caso para autocomlete widjet, esto funciona bien:

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

Tal vez algo no funciona con el parámetro fuente. ¿Debería ser ‘/Searchtest.php’?

http://api.jqueryui.com/autocomplete/#option-source

Algo así es la mejor manera. json_encode hace todo el trabajo por ti.

  $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);