2010-12-09 16 views
0

Ich versuche, die jQuery UI Autocomplete zu verwenden, und kann einfach nicht scheinen, zwei und zwei zusammen.jQuery UI AutoComplete Parsing Daten von Variable

Ich habe eine PHP-Seite, die für alle Json Datenanforderungen verwendet wird. Ich verwende eine switch-Anweisung, um zu bestimmen, welche Funktion ausgelöst wird, wenn eine Anfrage gemacht wird, und benutze post, um diese Daten an die php-Seite zu übergeben, dh; "AutoComplete" wird an die Seite übergeben, die sie anweist, eine bestimmte Tabelle aus meiner Datenbank abzurufen und sie dann in json zu codieren.

Die Daten sind wie folgt formatiert: ["1": "Email", "2": "Hosting"] und so weiter. Es gibt eine variable Anzahl von Elementen in den JSON-Daten, aber immer mit dem Schlüssel => Wert-Paar. Ich brauche den Schlüssel als Wert des Feldes und den Wert, der in der Autocomplete-Liste angezeigt werden soll. (Die Datenreihenfolge kann bei Bedarf umgekehrt werden, dies ist nur ein Beispiel).

Ich brauche oder möchte nicht, dass die Autocomplete-Funktion diese Datenbank jedes Mal trifft, wenn jemand einige Zeichen in das Feld eingibt. Daher versuche ich, nur eine statische Liste der für dieses Feld erforderlichen Optionen zu generieren ein JavaScript-Objekt zur Verwendung mit 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] }); 
      } 
     }); 
}; 

Die Funktion dann in meinem document.ready() Funktion aufgerufen wird:

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

Also, was ich brauche, ist in der Lage sein, eine Variable aus einem Ajax-Request kann, dass die automatische Vervollständigung als zum Erstellen Optionen. Ich kann einfach nicht herausfinden, wie ich das zur Arbeit bringen soll! Ich habe verschiedene Methoden ausprobiert, ohne Erfolg zu haben, einschließlich der Analyse der Daten mit mehreren Beispielen, die ich hier und anderswo gesehen habe. Die Dokumentation für die automatische Vervollständigung von ui besagt, dass Sie ein Array mit Schlüsselwertpaaren verwenden können, aber es mag meine Daten einfach nicht, egal wie formatiert sie ist.

Ich vermisse etwas offensichtlich, ich bin mir sicher.

+0

Update, das wurde nie gelöst. Ich habe aufgegeben, das Autocomplete-jquery-ui-Stück zu verwenden, da ich es nicht richtig funktionieren konnte. Ich habe stattdessen auf eine programmatisch erzeugte Auswahlbox umgeschaltet. :( – Garrett

Antwort

0

Hmm, es ist wirklich eine schlechte Übung, aber Sie könnten Eval() verwenden. Verwenden Sie einfach javascripts Schnell Objekt Notation (die Klammern wie jQuery verwendet)

eine bessere Lösung - Cache-Datenbank (Annahme) abfragt

+0

Ich werde in Caching meine Datenbankabfrage untersuchen. Das könnte den Trick tun. Ich möchte so viel unnötige Belastung von meinen Servern wie möglich entfernen, aber immer noch dynamische Funktionen wie diese Autovervollständigung bieten. – Garrett

+0

Es macht mehr Sinn, Ihre Zwischenspeicherung Abfragen als versuchen, mit JavaScript etwas Phantasie zu machen SQL ist eine allgemein schnelle Sprache (benennen Sie eine andere Sprache, die 1M Aufzeichnungen in Millisekunden suchen kann :)). Ich kenne dein Servermodell nicht, aber schau dir Doctrine an. Es optimiert automatisch Abfragen und Caching für Sie. Es ist ein PHP-ORM, das ich recht häufig verwende. – sethvargo

0

Haben Sie versucht, die dataType Option der Ajax-Aufruf Einstellung JSon? Siehe das Dokument hier: http://api.jquery.com/jQuery.ajax/

+0

Ja, das habe ich getan. Es schien keinen Unterschied zu machen. Es scheint, dass Autocomplete() Json-Daten selbst nicht analysieren kann. Ich kann nicht herausfinden, wie man die Daten für Autocomplete() aufräumt, um es benutzen zu können. Die Dokumentation dazu ist bestenfalls spärlich, und ich habe mehrere Antworten hier gesehen, die davon sprechen, es manuell zu analysieren, ich kann es einfach nicht für mich arbeiten lassen. Das Beste, was ich bisher von diesem Widget bekommen habe, sind alle Optionen, die in einer einzelnen Zeile unter dem Textfeld erscheinen. – Garrett