Typeahead.js fonctionne uniquement avec une source de données ajax personnalisée personnalisée lors de la soumission de la demande de manière synchrone et non asynchrone. Lorsque soumis de manière asynchrone (async: true), mon script et la fonction TABoards () personnalisée sont exécutés avant que la fonction cb () ne puisse propager la liste des résultats. Mon code ci-dessous fonctionne parfaitement et produit des résultats à partir de deux sources de données: une source de données ajax distante et une source de données “statique” qui génère toujours un seul résultat “Afficher tous les résultats pour [requête]”. Toutefois, le code résultant génère également la remarque suivante dans la console JavaScript du navigateur: “Synchronous XMLHttpRequest sur le thread principal est obsolète en raison de ses effets néfastes sur l’expérience de l’utilisateur final.” Ajout de “.done (function () {cb (response)});” n’a pas marché.
Comment puis-je réécrire ce code pour qu’il fonctionne exactement de la même manière, sauf que le navigateur ne produise pas d’avis?
var TABoards = function(q, cb){ $.ajax({ dataType: "json", async: false, url: '/typeahead.php?q='+q+'&type=boards', success: function(response){ cb(response); } }); } $('#hdrSrchQ').typeahead({ highlight: true, hint: false, minLength: 3 }, { name: 'ta-boards', displayKey: 'title', source: TABoards, templates: { header: 'Boards
', suggestion: function(data){ return '' + data.title + ' - ' + data.name + ''; } } },{ name: 'ta-viewall', displayKey: 'value', source: function(q, cb){ cb([{'value': q}]); }, templates: { suggestion: function(data) { return 'View all results for ' + data.value + '...'; } } });