Tengo esta entrada que quiero autocompletar con el siguiente script. La URL devuelve una lista de cadenas. Cuando escribo, los datos se muestran en la consola, sin embargo, la ventana de autocompletar no aparece.
¿Qué podría estar mal?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <input type="text" class="form-control my-input" name="from" id="from"> <script> $(document).ready(function () { $("#from").keyup(function (string) { $.ajax({ type: "GET", url: "http://127.0.0.1:5000/complete?station=" + $(this).val(), success: function (data) { $("#from").autocomplete({ source: data }); console.log(data) } }); }); }); </script> </body> </html>
Debe agregar jQuery-ui.min.css
, jquery.min.js
y jquery-ui.min.js
al proyecto. La siguiente aplicación, que desarrollé utilizando datos simulados, funciona correctamente. Llamé al método getList()
en el campo de error para simular la respuesta del servidor.
La imagen de prueba de la aplicación está disponible a continuación:
El código fuente de la aplicación está disponible a continuación:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <title>Document</title> </head> <body> Input: <input type="text" id="inputElement" onkeyup="myFunction(this.value)"> <script> function myFunction(value) { /* alert(`URL: http://127.0.0.1:5000/complete?station=${value}`); */ $.ajax({ type: "GET", url: "http://127.0.0.1:5000/complete?station=" + value, success: function (data) { if (data != '') { $("#inputElement").autocomplete({ source: data }); console.log(data) } }, /* I simulated the successful response from the server in the field below. */ error: function (data) { $("#inputElement").autocomplete({ source: getList() }); } }); } function getList() { var availableTags = ["ActionScript", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Scala", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scheme" ]; return availableTags; } </script> </body> </html>
Esto lo hizo:
$("#from").autocomplete({ source: function (request, response) { $.ajax({ url: 'http://127.0.0.1:5000/complete?station=' + $("#from").val(), dataType: "json", success: function (data) { response(data); }, error: function (xhr, status, error) { alert("Error"); } }); } });