2013-01-18 3 views
10

Ich versuche select2 mit AJAX-Laden zu verwenden.select2 mit Ajax-Post-Methode

Hier ist mein 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 }; 
     } 
    } 
}); 

Der Ajax-Aufruf ist zu einem Webmethod/Pagemethod in dem Code-Behind der gleichen Seite:

[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; 
    } 

Wenn Daten in das Textfeld eingegeben hat, die Eine POST-Anfrage wird gestellt, und der JSON-Versand scheint ordnungsgemäß formatiert zu sein.

jedoch die Antwort von der Pagemethod ist die gesamte HTML-Seite. Es ist mein Verständnis, dass dies mit Post-Methoden auftreten kann, wenn Sie Ihren "contentType" nicht ordnungsgemäß im Ajax-Aufruf festgelegt haben. Ich habe es so eingestellt wie alle meine anderen Ajax-Aufrufe, die auf der Seite funktionieren (sie verwenden nicht select2).

Hat ignorieren select2 den "content" Attribut? Oder habe ich etwas anderes falsch gemacht?

** EDIT ** Danach veröffentlichen, fand ich dieses Problem bei select2 der Github Website aufgeführt: Issue 492 - Add Support for contentType to Ajax

Es scheint, dass es nicht durch contenthindurchgeht. Kann ich Selet2's eingebauten Ajax Helfer umgehen und meinen eigenen manuell definierten verwenden?

Antwort

-5

würde ich mit WebAPI oder ServiceStack vorschlagen für Ihre Daten anstelle von [Webmethod] nennt.

+0

, dass eine Empfehlung ist, die auf Kommentare gesetzt werden sollten, nicht in einem answer.Also, wie würden Ändern Programmiertechniken helfen, die OP, wirklich? – ilter

+0

War nur versucht, das Poster eine einfache vorgeschlagene/unterstützte Art und Weise zu beheben. Da dies vor 7 Monaten gemacht wurde, kann ich jetzt nicht viel dagegen tun! :-) –

3

Ich habe gleiche Problem war und unten Lösung funktioniert für mich:

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

Vergessen Sie nicht, die CSRF-Token auf Ihre Post Anfrage hinzuzufügen. Es kann sein, dass Sie auf der Clientseite alles richtig machen, aber der Server lehnt die Anfrage ab, da das Token fehlt. Siehe zum Beispiel für das PHP Laravel Framework: https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token für weitere Informationen.