2014-10-22 8 views
5

Ho questo codice per creare un elemento Select2 da un campo di input:Select2 "TypeError: a è definito" errore

var codigo_arancelario = $codigo_arancelario.val(); 

$codigo_arancelario.select2({ 
    placeholder: "Seleccione un estado", 
    ajax: { 
     dataType: 'json', 
     url: function() { 
      return Routing.generate('obtenerCodigoArancelario'); 
     }, 
     data: function (codigo_arancelario) { 
      return { 
       filtro: codigo_arancelario 
      } 
     }, 
     results: function (data) { 
      var myResults = []; 
      $.each(data.entities, function (index, item) { 
       myResults.push({ 
        'id': item.id, 
        'nombre': item.nombre 
       }); 
      }); 
      return { 
       results: myResults 
      }; 
     } 
    }, 
    formatNoResults: function() { 
     return "No se encontró el código"; 
    }, 
    formatAjaxError: function() { 
     return "No hay conexión con el servidor"; 
    } 
}); 

Ma ogni volta che cerco di usarlo ottengo questo errore sulla console Firebug:

TypeError: a is undefined

ho controllato le intestazioni di risposta e ho ottenuto un Content-Type application/json e anche io controllo le intestazioni di richiesta dal momento che sto usando Symfony2 nel lato server e inviare il X-Requested-With XMLHttpRequest. La funzione Symfony2 restituisce un JSON come questo:

{ 
    "valid":false, 
    "entities":[ 
     { 
     "id":101, 
     "codigo":"4545", 
     "descripcion":null 
     }, 
     { 
     "id":102, 
     "codigo":"45455", 
     "descripcion":"gfhgfhfghfgh" 
     }, 
     { 
     "id":103, 
     "codigo":"45457", 
     "descripcion":"etert" 
     } 
    ] 
} 

Dov'è l'errore sul mio codice?

+0

@MohitArora nessuno dei due ha dati. L'esempio JSON è ciò che 'data.entities' ha – ReynierPM

+1

http://jsfiddle.net/arunpjohny/e39ftb64/1/ –

risposta

5

Select2 aspetta [{text="john doe",id="1"},{text="jane doe",id="2"}]

quindi è necessario cambiare 'nombre': item.nombre a 'text': item.nombre dovrebbe assomigliare seguito:

myResults.push({ 
     'id': item.id, 
     'text': item.nombre 
}); 
+0

Sempre ricevendo lo stesso errore – ReynierPM

+1

@ReynierPM 'item.nombre' non è definito penso che sia necessario' item.descripcion' –

-1

può essere la vostra dati è formiato sbagliato:
dati Tipo: PlainObject o stringa o un array dati da inviare al server. Viene convertito in una stringa di query, se non già una stringa. Viene aggiunto all'URL per le richieste GET. Vedere l'opzione processData per impedire questa elaborazione automatica. L'oggetto deve essere coppie chiave/valore. Se value è una matrice, jQuery serializza più valori con lo stesso tasto in base al valore dell'impostazione tradizionale (descritta di seguito).

vedere jquery for ajax

+0

E? Non ti seguo o non l'ho trovato utile, spiacente – ReynierPM

+0

usa il debug al breakpoint alla riga: var myResults = []; stampare il risultato del valore dello stack. –