2013-01-18 3 views
10

J'essaye d'employer select2 avec le chargement d'ajax.select2 avec la méthode de post ajax

Voici mon code:

clonedTemplate.find('[id^=detailsPhaseFinanceMinor_]').select2({ 
    placeholder: "Select", 
    minimumInputLength: 1, 
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper 
     type: 'POST', 
     contentType: "application/json; charset=utf-8", 
     url: "mapBasic.aspx/GetFinSys", 
     dataType: 'json', 
     data: function (term, page) { 
      return "{'term':\"" + term + "\"}"; 
     }, 
     results: function (data, page) { // parse the results into the format expected by Select2. 
      // since we are using custom formatting functions we do not need to alter remote JSON data 
      return { results: data.Value }; 
     } 
    } 
}); 

L'appel ajax est à un webmethod/pagemethod dans le code-behind de la même page:

[WebMethod] 
    public static List<LookupCodeItem> GetFinSys(string term) 
    { 
     string stringToCompareTo = term.ToLower(); 

     List<LookupCodeItem> result = new List<LookupCodeItem>(); 


     // FIN SYS 
     using (mapEntities db = new mapEntities()) 
     { 
      List<MPO_FINSYS_AMT> finSysCodes = (from x in db.MPO_FINSYS_AMT 
               select x).ToList(); 

      foreach (MPO_FINSYS_AMT item in finSysCodes) 
      { 
       string valKey = string.Format("{0}.{1}.{2}", item.FY, item.MDOT_MPO_CD, item.FIN_SYS); 
       LookupCodeItem x = new LookupCodeItem(); 
       x.Value = valKey; 
       x.ShortDescription = string.Format("{0}.{1}.{2}", item.FY, item.MDOT_MPO_CD, item.FIN_SYS); ; 
       x.LongDescription = string.Empty; 
       result.Add(x); 

      } 
     } 

     return result; 
    } 

Lors de la saisie des données dans la zone de texte, la POST demande est faite, et le json est envoyé semble être correctement formaté. Cependant, la réponse de la méthode pagemethod est la page html entière. Je crois comprendre que cela peut se produire avec les méthodes post si votre "contentType" n'est pas correctement défini dans l'appel ajax. Je l'ai défini comme tous mes autres appels ajax qui fonctionnent sur la page (ils n'utilisent pas select2).

Est-ce que select2 ignore l'attribut "contentType"? Ou y a-t-il autre chose que j'ai mal fait?

** EDIT ** Après avoir affiché, je trouve cette question figurant sur le site GitHub de select2: Issue 492 - Add Support for contentType to Ajax

Il semble que cela ne passe pas par contentType. Suis-je capable de contourner l'aide ajax de selet2 et d'utiliser ma propre définition manuelle?

Répondre

-5

Je suggère d'utiliser WebApi ou ServiceStack pour vos appels de données au lieu de [webmethod].

+0

C'est une recommandation qui devrait être mise sur des commentaires, pas dans une réponse. En outre, comment les techniques de programmation changeantes aideraient-elles le PO, vraiment? – ilter

+0

Était juste en train d'essayer de faire de l'affiche une solution facile à suggérer/supportée. Vu que cela a été fait il y a 7 mois, je ne peux pas faire grand chose à ce sujet maintenant! :-) –

3

J'étais ont même problème et en dessous de solution fonctionne pour moi:

ajax: { 
    ... 
    params: { // extra parameters that will be passed to ajax 
     contentType: "application/json; charset=utf-8", 
    } 
    ... 
} 
1

Ne pas oublier d'ajouter le jeton CSRF à votre demande de poste. Il se peut que vous fassiez tout du bon côté client, mais le serveur refuse la demande, car il manque le jeton. Voir par exemple pour le framework PHP Laravel: https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token pour plus d'informations.