2012-04-15 3 views
0

J'ai essayé d'implémenter la saisie semi-automatique dynamique dans mon programme. Cela fonctionne parfaitement après la première entrée. Mais il ne montre pas de suggestions pour la première tentative. Cependant, le serveur répond à la source requise pour la saisie semi-automatique. Voici mon code.jQuery autocomplete ne fonctionne pas pour la première tentative

 $('.autocomplete').live('keyup', function(){ 
     $this = $(this); 
     var search = $this.val(); 
     $.ajax({ 
      url:'/package/index/search/keyword/'+search+'/format/json', 
      async: false, 
      success: function(res){ 
       //console.log(res.options); 
       //console.log(res.defined_ids); 
       staticObject = res.defined_ids; 
       $this.autocomplete({ 
        source: res.options 
       }); 
      } 
     });    
    }); 

code côté serveur est

$keyword = $this->_getParam('keyword'); 
    $elementDetailModel = new Package_Model_ElementDetail(); 
    $arr = $elementDetailModel->searchElementDetail($keyword); 
    $this->view->options = $arr['options']; // returns in the format array("test2","my new test", "night stay in delux room") 
    $this->view->defined_ids = $arr['defined_ids']; // returns in the format array(21::21=>"test2", 22::22=>"my new test", 24::24=>"night stay in delux room") 

quand je console defined_ids journalisés et options Firebug, je me suis réponse suivante quand je tapais 't' dans le champ de texte.
Options:

[ "test2", "mon nouveau test", "séjour d'une nuit dans la chambre de Delux"]

defined_ids:

Object {21 :: 21 = "test2", 22 :: 22 = "mon nouveau test", 24 :: 24 = "nuit dans une chambre de luxe"}

Toute aide serait appréciable. Merci d'avance.

+0

C'est probablement un problème de serveur. Que voyez-vous dans firebug? pouvez-vous nous donner un violon? – gdoron

+0

J'ai eu ce genre de réponse dans firebug, ["test2", "mon nouveau test", "nuit dans la chambre delux"] pour res.options –

+0

registre \t Object {Zend_View_Helper_Doctype = {...}, Zend_View_Helper_Placeholder_Registry = { ...}, db = {...}, plus ...} \t chemin \t "/ paquet/index" \t Options \t [ "test2", "mon nouveau test", "séjour d'une nuit dans la chambre de Delux"] \t \t "test2" \t \t "mon nouveau test" \t \t "nuit en chambre de luxe" \t de defined_ ids \t Object {21 :: 21 = "test2", 22 :: 21 = "mon nouveau test", 24 :: 24 = "séjour d'une nuit dans la chambre de Delux"} \t 21 :: 21 \t "test2" \t 22 :: 21 \t "mon nouveau test" \t 24 :: 24 \t "nuit en chambre de luxe" ........... réponse complète. –

Répondre

0

Le format affiché à partir du firebug n'est pas celui d'un JSON. C'est un tableau, auquel on accède en utilisant des index.

Lorsque vous affichez la sortie, assurez-vous d'abord de json_encode() la baie, puis affichez-la.

Par exemple, en ce qui concerne la question, vous tableau final devrait ressembler à ceci

$array['options'] = array("test2", "my new test", "night stay in room"); 
//Then you should echo the encoded the array to json 

echo json_encode($array); 

Ensuite, assurez-vous vues ÉTEINDRE cette demande.

+0

réponse devrait être retournée dans une variable. Donc quand j'ai fait json_encode, j'ai reçu une réponse qui ne marchait pas. options "[" test2 "," mon nouveau test "]" –

+0

@BashantaDahal जी, Vous devez faire écho à la variable codée json. Je ne peux pas vous aider à moins de voir plus de données et de codes. – Starx

+0

Merci pour votre réponse. J'ai aussi besoin de defined_ids car j'ai besoin d'assigner une variable staticObject = res.defined_ids après chaque requête; Voici le code du serveur. 'Code' –

0

Vous avez probablement oublié de spécifier le contexte sever-side. Dans la méthode de commande vous _init(), ajoutez:

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('actionName', 'json') 
      ->initContext(); 

et assurez-vous de remplacer actionName par votre nom de contrôleur d'action.

Ensuite, $this->view->options = $arr['options'] sera automatiquement converti dans un format json valide.

Plus d'informations sur AjaxContext here in the manual.

+0

Merci pour votre réponse. J'ai fait exactement la même chose que vous avez mentionnée. Mais encore, ça ne marche pas. Cela fonctionne après la première tentative. Je ne sais pas pourquoi la saisie semi-automatique ne fonctionne pas après la première tentative –

+0

C'est étrange, nous avons besoin de plus d'informations sur votre problème pour vous aider (que dit Firebug?). Aussi, avez-vous envisagé d'utiliser [ZendX_JQuery] (http://framework.zend.com/manual/1.11/fr/zendx.jquery.html)? ('ZendX_JQuery_Form_Element_AutoComplete') – Liyali

+0

J'ai modifié la question. J'espère que vous pouvez avoir plus d'idée sur mon problème. –

Questions connexes