我正在嘗試使用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幫助器並使用我自己的手動定義的幫助器?
這是一個建議,應該放在評論,而不是在答案。另外,如何改變編程技術幫助OP,真的嗎? – ilter
只是試圖讓海報成爲一個簡單的建議/支持的方式來解決。看到這是7個月前完成的,現在我對此無能爲力! :-) –