11
votes

jQuery autocomplete d'ordre des résultats

J'utilise le Plugin JQuery-Autocomplete pour obtenir des suggestions d'achèvement de la chaîne d'entrée en utilisant un Ajax Appel à un serveur. En outre, le serveur s'occupe de renvoyer les résultats dans l'ordre dans lequel je souhaiterais qu'ils apparaissent, mais l'autocomplete les montre dans un ordre différent.

Comment puis-je configurer JQuery Autocomplete pour ne pas réorganiser la sortie? Je n'ai besoin d'aucun type de traitement de la fin du client, car les données ont déjà été classées / triées au besoin.


2 commentaires

Qu'est-ce que vous entendez par "Auto complet les montre dans un ordre différent"?


Je veux dire que l'ordre des chaînes affichées dans la liste déroulante est différente de celle renvoyée par le serveur (qui est une chaîne de séquence séparée de "\ n" de caractères, comme indiqué dans la documentation).


3 Réponses :


19
votes

Trier simplement les résultats du serveur avant de l'envoyer à la section automatique doit le faire.

Donc avant que vous echo json_encode ($ retour_arr); Utilisez le Trier () fonction sur $ retour_arr

Vous pouvez Essayez également quelque chose comme ceci:

La logique consiste à accumuler une gamme de matchs qui commencent avec le terme, puis concaténent qu'avec les correspondances qui contiennent le terme mais ne commencent pas avec elle . xxx

Exemple: http: //jsfiddle.net/zkvrs/

Source: HTTPS: //stactverflow.com/a/8302996/973155


6 commentaires

Le serveur s'occupe de renvoyer les résultats dans l'ordre dans lequel je voudrais qu'ils apparaissent, mais l'autocomplete les montre dans un ordre différent. On dirait que l'OP fait déjà cela.


Stackoverflow.com/a/8302996/277923 Je lisez ceci à partir du lien ci-dessus, mais je suis incapable de comprendre comment puis-je Utilisez ceci pour faire «Pas de tri» du tout. Je voudrais que JQuery-Autocomplete montrait le résultat dans la commande renvoyée par l'appel Ajax.


J'ai partagé le code concerné dans la prochaine réponse Stackoverflow.com/a/10950584/277923


Farhan, si vous n'avez pas écrit le code ci-dessus, c'est Etiquette de partager sa source. Andrew Whitaker a publié cette dernière année dans le lien Rajatkhanduja mentionné ci-dessus.


c'est parfait! Tri des éléments qui commencent par le terme avant la tri alphabétique est une énorme amélioration de la convivialité lorsqu'il est une excellente amélioration des grands ensembles. Merci!


Stackoverflow.com/Questtions/38857001 / ... répondre s'il vous plaît



11
votes

Eh bien, il s'est avéré être plus simple que je pensais. J'ai décidé de lire le code du plugin et de le modifier en commentant le code qui trie ma sortie.

C'est quand j'ai trouvé une variable 'sortresults: true' en défaut. Donc, tout ce dont j'avais besoin était de définir cette variable à la fausse. Je n'ai pas trouvé cela dans la documentation cependant.

$ ('# rechercher'). Autocomplete ({URL: "index.php", sortresults: false})

La sortie est maintenant dans l'ordre exact dont j'ai besoin.

J'ai eu l'idée de lire le code pour trouver / résoudre le problème d'ici: jQuery" autocomplete "plugin est en train de gâcher l'ordre de mes données (Ce n'est pas le même plugin)

merci. :)


4 commentaires

Fera sûrement cela, après 48 heures.


Cela ressemble plus à cela, tellement plus facile d'afficher le résultat pré-traité du serveur que le côté de la clientèle. +1


Êtes-vous sûr que vous utilisez le JQUERY UI SATECOMPOMPET Widget ? J'ai parcouru la documentation GitHub Source et API et 1. Le paramètre URL n'existe pas 2. Les sortressults n'apparaissent jamais nulle part dans la source (la version 1.8) ...


Les sortresults n'existent pas comme une option et cela ne semble pas fonctionner. Les pensées?



1
votes

Comme il n'y a pas d'options de sortressultes dans la construction actuelle du plug-in Jquery Autocomplecte, je devais rechercher une autre solution à ce problème et découvert la seule raison pour laquelle le plugin est le résultat du serveur est que la réponse du serveur est normalisée chaque fois que ce n'est pas un tableau purs. Objets {Label: ..., valeur: ...}.

Considérant PHP comme langue de votre utilisation, JSON_ENCODE (Array_Values ​​($ votre_array)); devrait faire le tour.


1 commentaires

Merci @skophek! Juste pour clarifier, fournissez-le au paramètre de réponse de la fonction source: [{étiquette: "Suggestion", valeur: "Suggestion"},] - pas ceci: ["Suggestion",]