2013-01-18 24 views
10

私はselect2をajax読み込みで使用しようとしています。ここで select2 with ajax postメソッド

は私のコードです:

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

AJAX呼び出しは、同じページのコードビハインドでWebMethod属性/ pagemethodにある:

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

テキストボックスにデータを入力、 POST要求が行われ、jsonが適切に書式設定されているように見えます。

ただし、ページングメソッドからの応答はhtmlページ全体です。 ajax呼び出しで "contentType"が正しく設定されていないと、これがポストメソッドで発生する可能性があると私は理解しています。私は他のすべてのAjax呼び出しと同じ設定をしています(select2を使用していません)。

select2はcontentType属性を無視しますか?それとも私が間違ってやったことがありますか?

** EDIT ** これを掲示した後、私はこの問題はSELECT2のgithubのサイトに記載されているが見つかりました: Issue 492 - Add Support for contentType to Ajax

それはcontentTypeの通過しないことが表示されます。 selet2の組み込みのajaxヘルパーをバイパスし、手動で定義したものを使用できますか?

答えて

-5

[webmethod]の代わりにデータ呼び出しにWebApiまたはServiceStackを使用することをお勧めします。

+0

これは、コメントではなく、回答に入れるべき推奨事項です。また、変化するプログラミングテクニックは、実際どのようにOPに役立つでしょうか? – ilter

+0

ポスターを簡単に提案/修正する方法を手に入れようとしていただけです。これが7ヶ月前に行われたのを見て、私は今それについてはほとんどできません! :-) –

3

私は同じ問題を抱えているし、ソリューションの下に私の作品だった:

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

はあなたのポストの要求にCSRFトークンを追加することを忘れないでください。クライアント側ですべての作業を正しく行っている可能性がありますが、トークンがないためにサーバーが要求を拒否している可能性があります。 PHP Laravel Frameworkの例:https://laravel.com/docs/5.4/csrf#csrf-x-csrf-tokenを参照してください。