J’essaie de configurer mon champ de saisie semi-automatique de l’interface utilisateur Jquery pour qu’il contienne des données provenant d’une connexion ajax. Voici mon code jusqu’à présent:
$("#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 } }); } }); } });
C’est mon 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:
Ingredient Measurement Amount
Quand je commence à taper “mil” (pour le lait), mon code me donne cette erreur:
MODIFIER:
J’ai fait votre changement, qui a fonctionné plusieurs fois, mais je reçois maintenant une nouvelle erreur –
Exception non gérée à la ligne 55, colonne 25 dans [URL]
0x800a1391 – Erreur d’exécution Microsoft JScript: “données” n’est pas défini
$("#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 }})) }); } });
Vous devez changer le rappel de succès en
response($.map(data, function(v,i){ return { label: v.MainName, value: v.MainItemID }; }));
Violon .
Le fichier jQuery.map permet de convertir tous les éléments d’un tableau ou d’un object en un nouveau tableau d’éléments.
Mise à jour: Ajouter un filtre
$("#mainIngredientAutoComplete").autocomplete({ source: function (request, response) { var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" ); $.ajax({ url: "../api/IngredientChoices", dataType: "json", success: function (data) { response($.map(data, function(v,i){ var text = v.MainName; if ( text && ( !request.term || matcher.test(text) ) ) { return { label: v.MainName, value: v.MainItemID }; } })); } }); } });