2013-01-18 111 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發送似乎被正確格式化。

但是,pagemethod的響應是整個html頁面。我的理解是,如果您沒有在ajax調用中正確設置「contentType」,則可以使用post方法進行。我已經將它設置爲與我在頁面上工作的所有其他ajax調用相同(它們不使用select2)。

select2是否忽略「contentType」屬性?還是有什麼我不正確地做了?

**編輯** 張貼在此之後,我發現在選擇2的GitHub的網站上列出的這個問題: Issue 492 - Add Support for contentType to Ajax

看來,它不會通過通的contentType。我能否繞過selet2內置的ajax幫助器並使用我自己的手動定義的幫助器?

回答

-5

我會建議使用WebApi或ServiceStack進行數據調用而不是[webmethod]。

+0

這是一個建議,應該放在評論,而不是在答案。另外,如何改變編程技術幫助OP,真的嗎? – ilter

+0

只是試圖讓海報成爲一個簡單的建議/支持的方式來解決。看到這是7個月前完成的,現在我對此無能爲力! :-) –

3

我有同樣的問題,以下解決方案適用於我:

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

不要忘記將CSRF令牌添加到您的POST請求。這可能是因爲你在客戶端做了所有事情,但服務器拒絕了請求,因爲它缺少了令牌。有關更多信息,請參閱PHP Laravel Framework:https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token