J’apprends encore Jquery et je suis un peu confus avec la tâche que j’ai à accomplir.
Cela semble être une tâche simple … J’ai une boîte que je veux remplir avec Options au clic. Je ne veux pas qu’il soit rempli au chargement de la page, mais seulement lorsque quelqu’un demande à voir la liste. En outre, il doit être rempli qu’une seule fois. Je ne veux vraiment pas que la demande de sortir à chaque fois que quelqu’un élargit la liste.
J’imagine que j’aurai probablement un appel de fonction dans mon élément Select
Ensuite, demandez à une fonction Javascript getUsers () d’appeler mon ActionMethod Json GetUsers () pour obtenir cette liste. Comment ?
Quelque chose comme…?
function getUsers() { getJSON("/Users/GetUsers", null, function (data){} }
ou JQuery? …
$("usersList").click( $.getJSON("/Users/GetUsers", null, function (data) {} )
Je dois mentionner que j’ai vu ce message: remplir la liste de sélection avec des données JSON dans JQuery lorsque la liste de sélection est chargée (pas le document)
Mais j’ai besoin d’aide pour tout mettre en place s’il vous plaît. Merci d’avance!
Voici le code javascript que je voudrais utiliser pour renseigner la zone de sélection.
$.getJSON("/Users/GetUsers", null, function(data) { $("#UsersList option").remove(); // Remove all ") // Yes you can do this. .text(item.Description) .val(item.Id) ); }); });
Je vous recommande de déclencher cette opération lors du chargement de la page et non lorsque l’utilisateur clique sur la zone de sélection. jQuery AJAX est asynchrone par défaut (comme il se doit) il y aura donc un moment ou deux où la zone de sélection sera vide, ce qui peut grandement dérouter l’utilisateur.
Était-ce là l’ampleur de votre question ou aviez-vous également besoin d’aide du côté MVC? Si vous utilisez ASP.Net MVC, il existe en fait un type de résultat spécifique de JsonResult, ce qui simplifie un peu la création de méthodes de contrôleur JSON car elles ne nécessitent pas de vues correspondantes. Cela vous permet également d’utiliser des structures de données anonymes, ce qui simplifie un peu les projections spécifiques à une méthode.
EDIT Voici la méthode de base pour renvoyer une structure JSON que le code jQuery ci-dessus comprendra. Notez que les propriétés u.Username
et u.ID
dépendent de votre object Utilisateurs.
[HttpPost] public JsonResult GetUsers() { return Json(new { Users = from u in _usersRepository.Get() select new { Description = u.Username, ID = u.ID } }); }
Je vous recommanderais toutefois d’abandonner cette approche dès que possible et de choisir une structure de message JSON standard. Celui que j’utilise ressemble à ceci:
{ Success: bool, LoggedIn: bool, ClientErrors: [ { Number: int, Description: ssortingng, Parameter: ssortingng }, { Number: int, Description: ssortingng, Parameter: ssortingng }... ], ServerErrors: [ { Id: int, Message: ssortingng }, { Id: int, Message: ssortingng }... ], Data: {} }
Voici quelques raisons pour cela:
En aucun cas, vous ne devriez considérer ma structure comme un moyen de le faire. Il est clair que vos besoins d’application peuvent être très différents des miens. La cohérence, plus que toute structure particulière est la leçon ici.
EDIT: 06/01/2016 – Vu que les gens regardent toujours cette réponse. En ce qui concerne le remplissage du menu déroulant, je recommanderais d’envisager l’utilisation d’un cadre contraignant dans les deux sens. Personnellement, je préfère Knockout.JS pour sa facilité et sa légèreté, bien qu’Angular.JS fasse également le travail. Mis à part cela, le rest de cette réponse est encore relativement à jour.
EDIT: 8/10/2016 – Il manquait une virgule dans le code.
J’utiliserais l’option jQuery.
// You are missing the new anonymous function call $("#usersList").click(function() { // If the select list is empty: if ($(this).find("option").size() > 0) { // Documentation on getJSON: http://api.jquery.com/jQuery.getJSON/ $.getJSON("/Users/GetUsers.php", null, function (data) { $.each(data.items, function(i,item){ // Create and append the new options into the select list $("#usersList").append(""); }); }); } });
Étant donné que les opérations append()
sont relativement “coûteuses”, vous pouvez également simplement construire une chaîne contenant les informations et l’append une seule fois, comme suit:
var collaboration = ""; $.each(data.items, function(i,item){ collaboration += ""; }); $("#usersList").append(collaboration); ...
Voici un jsfiddle qui montre comment déterminer si la liste de sélection est vide.