Sto provando ad impostare il campo del completamento automatico dell'interfaccia utente Jquery per ottenere dati da una connessione Ajax. Ecco il mio codice finora:Completamento automatico Ajax/Jquery con dati JSON
$("#mainIngredientAutoComplete").autocomplete({
source: function (request, response) {
$.ajax({
url: "../api/IngredientChoices",
dataType: "json",
success: function (data) {
response(function (item) {
return {
label: item.MainName,
value: item.MainItemID
}
});
}
});
}
});
Questo è il mio JSON:
[{"SubItemID":1,"MainItemID":1,"SubName":"2%","MainName":"Milk"},{"SubItemID":2,"MainItemID":1,"SubName":"Skim/Fat Free","MainName":"Milk"},{"SubItemID":3,"MainItemID":2,"SubName":"Chedder","MainName":"Cheese"}]
HTML:
<table id="tbl_ingredients" style="padding:0px;">
<tr id="ingHeader">
<td>Ingredient</td>
<td>Measurement</td>
<td>Amount</td>
<td><input id="mainIngredientAutoComplete" /></td>
<td></td>
</tr>
</table>
Quando inizio a digitare "mil" (per il latte) il mio codice dà me questo errore:
EDIT:
ho fatto la modifica, che ha lavorato per un paio di tentativi, ma ora sto ottenendo un nuovo errore -
non gestita eccezione alla linea 55, colonna 25 in [URL]
0x800A1391 - Microsoft JScript runtime error: 'dati' non è definito
$("#mainIngredientAutoComplete").autocomplete({
source: function (request, response) {
$.ajax({
url: "../api/IngredientChoices",
dataType: "json",
response: ($.map(data, function(v,i){
return {
label: v.MainName,
value: v.MainItemID
}}))
});
}
});
+1: Si può anche usare '$ .map' invece di spingere gli elementi in un nuovo array da soli. –
@AndrewWhitaker Hai ragione, soluzione aggiornata –
Questo ha funzionato, grazie! :) Potresti spiegare cosa fa $ .map? – Yecats