2010-01-27 8 views
1

J'essaie d'implémenter une recherche en direct sur mon site de photos en utilisant jQuery et le plugin autocomplete. Tout fonctionne quand je les spécifions données localement:Aide pour passer le tableau JSON multidimensionnel à la saisie semi-automatique jQuery via AJAX

var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ]; 

Cependant quand je déplace ce à PHP, jQuery est incapable d'analyser correctement les résultats. Je ne suis pas vraiment sûr de ce qui se passe ici. Mon code actuel est ci-dessous:

<script> 
$(document).ready(function(){ 
var data = '/livesearch'; 
$("#aut_field").autocomplete(data, { 
    formatItem: function(item) { 
    return item.text; 
    } 
}).result(function(event, item) { 
    location.href = item.url; 
}); 
       }); 
</script> 

Et mon script PHP imprime un tableau multidimensionnel dans le format suivant:

{"1":{"text":"Google Website","url":"http:\/\/www.google.com"}, 
"2":{"text":"Yahoo Website","url":"http:\/\/yahoo.com"},} 

Cependant quand je alerte (item.text) la variable dit non définie.

Si je alerte (item), je vois toute la chaîne sortie en PHP.

J'ai essayé de jouer avec eval() mais je ne sais pas où l'installer ou comment interpréter les données par JS. Merci de votre aide. Exemple de code spécifique à ma mise en œuvre est apprécié.

+1

ce qui est avec {ldelim} et {} rdelim dans le premier extrait de code? –

+0

Désolé - devrait lire {et} ... c'était un copier-coller de Smarty. Fixé. – ensnare

Répondre

1

Le problème est avec le code php.

Votre travail consiste à imiter la structure de la matrice javascript active. Voir la json_encode de php()

1

try dans votre php ce modèle:

[ 
    {"text":"Google Website","url":"http:\/\/www.google.com"}, 
    {"text":"Yahoo Website","url":"http:\/\/yahoo.com"} 
] 
+0

Cela a fonctionné. Je vous remercie. – ensnare

+0

Ensuite, vous devriez accepter cette réponse en cliquant sur le chèque creux. – SLaks

0

Et votre script PHP retourner un tableau multidimensionnel/objet mix. Si vous insistez (vous faire exploser votre var avec plusieurs "texte:" amd "url";) il shou1ld être:

[[{"text":"Google Website","url":"http:\/\/www.google.com"}],[{"text":"Yahoo Website","url":"http:\/\/yahoo.com"}]] 

Mieux:

var x=[["Google Website","http:\/\/www.google.com"],["Yahoo Website","http:\/\/yahoo.com"]]; 

Si vous voulez sauter sur le site de Yahoo : var url = x [1] [1];

Ou:

var x={"Google_Website":"http:\/\/www.google.com","Yahoo_Website":"http:\/\/yahoo.com"}; 

Si vous voulez sauter Google_Website: var url = x [ "Google_Website"];

Mon conseil: visitez enter link description here