2010-12-09 31 views
0

J'essaie d'utiliser la saisie semi-automatique de l'interface utilisateur jQuery, et je n'arrive pas à en mettre deux et deux ensemble.jQuery UI AutoComplete analyse des données à partir de la variable

J'ai une page php qui est utilisée pour toutes les demandes de données json. J'utilise une instruction switch pour déterminer quelle fonction déclencher quand une demande est faite, en utilisant post pour transmettre ces données à la page php, c'est-à-dire; "AutoComplete" est passé à la page, qui lui dit alors de récupérer une table particulière de ma base de données, puis l'encoder dans json. Les données sont formatées comme suit: ["1": "Email", "2": "Hébergement"] et ainsi de suite. Il y a un nombre variable d'éléments dans les données json, mais toujours avec la paire clé => valeur. J'ai besoin que la clé soit la valeur du champ, et la valeur à afficher dans la liste de saisie semi-automatique. (L'ordre des données peut être inversé si besoin est, ceci n'est qu'un exemple). Je n'ai pas besoin ou je ne veux pas que la fonction de saisie semi-automatique frappe cette base de données chaque fois que quelqu'un tape des caractères dans la boîte, donc j'essaye de générer une liste statique des options nécessaires pour ce champ et les affecter à un objet javascript à utiliser avec autocomplete().

function myFunction (DataType, ID) { 
    $j.ajax({ 
     type: 'POST', 
     cache: 'false', 
     url: 'json.php', 
     data: {jsonFunction:DataType}, 
     success: function(data){ 
       $j(ID).autocomplete({ source: [data] }); 
      } 
     }); 
}; 

La fonction est alors appelée dans ma fonction document.ready():

myFunction ("AutoComplete", "input#Type"); 

donc ce que je dois est de pouvoir créer une variable d'une requête ajax que autocomplete peut utiliser comme options Je n'arrive tout simplement pas à comprendre comment ça marche! J'ai essayé plusieurs méthodes différentes en vain, y compris l'analyse des données avec plusieurs exemples que j'ai vus ici et ailleurs. La documentation pour la saisie semi-automatique de l'interface utilisateur indique que vous pouvez utiliser un tableau avec des paires valeur/clé, mais cela n'aime pas mes données, quel que soit leur formatage.

Il me manque quelque chose d'évident, j'en suis sûr.

+0

Mise à jour, cela n'a jamais été résolu. J'ai abandonné l'utilisation de la pièce autocomplete jquery-ui car je ne pouvais pas le faire fonctionner correctement. Je suis plutôt passé à l'aide d'une boîte de sélection générée par programme. :( – Garrett

Répondre

0

Hmm, c'est vraiment une mauvaise pratique, mais vous pouvez utiliser eval(). Il suffit d'utiliser la notation javascripts rapide objet (les accolades comme jQuery utilise)

Une meilleure solution - cache votre base de données (hypothèse) requêtes

+0

Je vais regarder dans la mise en cache de ma requête de base de données, cela pourrait faire l'affaire, je veux enlever autant de charge inutile de mes serveurs que possible mais toujours offrir des fonctionnalités dynamiques telles que cette autocomplete – Garrett

+0

requêtes que d'essayer de faire quelque chose de sophistiqué avec javascript.SQL est une langue généralement rapide (nommez une autre langue qui peut rechercher des enregistrements 1M en millisecondes :)). Je ne connais pas votre modèle de serveur, mais examinez Doctrine. Il optimise automatiquement les requêtes et la mise en cache pour vous. C'est un ORM PHP que j'utilise assez souvent – sethvargo

0

Avez-vous essayé de régler l'option dataType de l'appel ajax à JSON? Voir le document ici: http://api.jquery.com/jQuery.ajax/

+0

Oui, j'ai fait ça. Cela ne semblait pas faire la différence. Il semble que autocomplete() ne peut pas analyser les données json lui-même. Je ne peux pas comprendre comment nettoyer les données pour autocomplete() pour pouvoir l'utiliser. La documentation sur elle est au mieux clairsemée, et j'ai vu plusieurs réponses ici qui parlent de l'analyser manuellement, je ne peux tout simplement pas le faire fonctionner pour moi. Le meilleur que j'ai obtenu de ce widget est pourtant toutes les options apparaissant sur une seule ligne sous le champ de texte. – Garrett