14

我正在尝试将select2与 ajax 加载一起使用。

这是我的代码:

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”属性?还是我做错了什么?

** 编辑 ** 发布后,我在 select2 的 github 站点上发现了这个问题: Issue 492 - Add Support for contentType to Ajax

它似乎没有通过 contentType。我是否能够绕过 selet2 的内置 ajax 助手并使用我自己手动定义的助手?

4

4 回答 4

4

我遇到了同样的问题,以下解决方案对我有用:

ajax: {
   ...
   params: { // extra parameters that will be passed to ajax
        contentType: "application/json; charset=utf-8",
   }
   ...
}
于 2016-01-13T11:14:40.560 回答
1

不要忘记将 CSRF 令牌添加到您的发布请求中。可能是您在客户端做的一切都是正确的,但服务器拒绝了请求,因为它缺少令牌。例如,请参阅 PHP Laravel 框架:https ://laravel.com/docs/5.4/csrf#csrf-x-csrf-token了解更多信息。

于 2017-04-20T19:35:42.657 回答
0

这对我有用:

 $(document).ready(function () 

{

        $('.js-example-basic-single').select2({
            minimumInputLength: 2,
            ajax: {
                url: "your api endpoint",
                dataType: 'json',
                contentType:"application/json; charset=utf-8",
                type: "POST",
                data: function (term) {
                    return (JSON.stringify({ searchString: term.term }))
                }
            }
        });
        
});

html : https://select2.org/getting-started/basic-usage

于 2021-09-17T08:45:25.237 回答
-7

我建议使用 WebApi 或 ServiceStack 进行数据调用,而不是 [webmethod]。

于 2013-05-04T13:33:59.267 回答