Ciao Ragazzi, scusate se vi riapro quasta discussione ma anch'io mi sto trovando ad utilizzare bootstrap con il suo typeahead ma ho qualche problema nella gestire la risposta che il file php mi restituisce correttamente. In pratica vorrei utilizzare typeahead in un form e fare in modo che, selezionato un elemento della lista, venga attribuito il valore id al valore del campo input e ad altri campi dipendenti da esso. Ammetto che sono alle prime armi con bootstrap ed anche con ajax non sono un fenomeno e quindi eccomi qui chiedervi di farmi un po' di chiarezza. Vi posto il codice da me scritto e i miei dubbi sul funzionamento, spero vogliate dissiparmeli
Questo è il mio html come indicato nel manuale di bootstrap ho messo il data-provide e ho aggiunto autocomplete=off come trovato in altri esempi
[HTML]
<input type="text" name="nCo" id="nCo" value="" class="span12" data-provide="typeahead" autocomplete="off" />
<input type="text" name="iCo" id="iCo" value="" class="span12" />
[/HTML]
il mio file php, che è la sorgente del mio array, funziona correttamente e mi restituisce un array così costituito
Array ( [0] => Array ( [idCo] => 1 [nCo] => Mario Rossi [iCo] => Via San Pietro, 54 ) [1] => Array ( [idCo] => 2 [nCo] => Matteo Bianchi [iCo] => Via Roma, 24 ) )
file php
[PHP]
$co = $_POST['value'];
$query = mysql_query("select idCo,nCo,iCo from co where nCo like '%{$co}%'") or die(mysql_error());
while($row = mysql_fetch_array($query))
{
$result[] = array(
'idCo' => $row['idCo'],
'nCo' => $row['nCo'],
'iCo' => $row['iCo']
);
}
echo json_encode($result);
[/PHP]
e qui finalmente il mio script con tutti i dubbi che si porta dietro
<script type="text/javascript">
$(document).ready(function(){
$("#nCo").typeahead({
source: function(value,process){
$.ajax({
type: 'POST',
url: 'miofilesource.php',
dataType: 'json',
data: {'value' : value,'act':'searchCo'},
async: false,
success: function(data){
return process(data);
}
})
}
})
});
</script>
i miei dubbi riguardano "return process(data);" dove negli esempi io ho trovato spesso typeahead.process(data) ma che a me restituisce errore perchè mi dice che non è una funzione come se non fosse incluso bootstrap.typeahead.js ma se recupero in php solo il valore nCo con lo script sopra riportato mi viene popolato il menù a tendina correttamente. A questo punto mi chiedo come funziona process? Se per caso non cambio lo script (quindi lascio return process(data)) ma richiedo più valori come nel file php sopra riportato in firebug mi da il seguente errore (TypeError: e.toLowerCase is not a function) e non mi popola l'elenco. Io vorrei che giustamente mi popolasse con il nome l'elenco, mi assegnasse al value di questo input il valore selezionato e mi mettesse il terzo elemento dell'array al value del campo successivo. Ma come? giustamente non vi chiedo di farlo voi per me ma di aiutarmi a capire come potrei fare. Grazie mille ragazzi e spero possiate aiutarmi