2010-11-08 17 views
1

J'ai deux zones de texte que j'essaie d'utiliser pour la saisie semi-automatique. Les données sources des deux proviennent d'un service Web ASP.NET ASMX, renvoyé au format JSON. Je reviens d'une liste où NameValue est définie comme:jQuery Saisie semi-automatique avec des paires nom/valeur d'ASMX via JSON

public struct NameValue { public string Name; public string Value; }

Comment puis-je analyser ces données telles que la valeur de nom déroulant sélectionné peut être stocké loin dans un champ caché?

Voici mon code jusqu'ici lorsque la page se charge, et msg.d contient les données JSON (je vois msg.d[0].Name et msg.d[0].Value)

$.ajax({ 
     type: "POST", 
     url: '/Services/Team.asmx/GetClubTeams', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      $('#<%= txtFromTeam2.ClientID %>, #<%= txtToTeam2.ClientID %>').autocomplete({ 
      source:msg.d 
      }); 
     }, 
     error: function(xhr, msg) { 
      alert(msg); 
     } 
     }); 

Répondre

3

a répondu à ma propre question. L'astuce est de savoir que le nom/valeur doit être de la forme:

public struct TeamData { public string key; public string value; }

Il semble value (minuscule) questions à jQuery.

Le $.ajax() appel est la suivante ... espérons que cela aide quelqu'un:

$.ajax({ 
     type: "POST", 
     url: '/Services/Team.asmx/GetClubTeams', 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     data: "{}", 
     success: function(data) { 
     $('#txtFromTeam2').autocomplete({ 
      source: data.d, 
      minLength: 3, 
      focus: function(event, ui) { 
      $('#txtFromTeam2').val(ui.item.value); 
      return false; 
      }, 
      select: function(event, ui) { 
      $('#txtFromTeam2').val(ui.item.value); 
      $('#<%= txtFromTeam2Id.ClientID %>').val(ui.item.key); 
      populatePlayers(ui.item.key); 
      return false; 
      } 
     }); 
     $('#txtToTeam2').autocomplete({ 
      source: data.d, 
      minLength: 3, 
      focus: function(event, ui) { 
      $('#txtToTeam2').val(ui.item.value); 
      return false; 
      }, 
      select: function(event, ui) { 
      $('#txtToTeam2').val(ui.item.value); 
      $('#<%= txtToTeam2Id.ClientID %>').val(ui.item.key); 
      return false; 
      } 
     }); 
     }, 
     error: function(xhr, msg) { 
     alert(msg); 
     } 
    }); 
+1

Merci Mark pour partager cette ... – Kwex