使用 select2 和 ajax 调用 asp.Net 服务自定义参数

Using select2 with ajax call to asp.Net service custom params

我打算使用 select2 jQuery 插件,并希望在 ajax 调用 aspx.net WebMethod

时使用自动完成功能

我的问题是如何在我的 ajax 调用中获取要搜索的词。我试过这个并且有效。
JavaScript代码:

$(".js-example-tags").select2({
            ajax: {
                dataType: "json",
                type: "POST",
                async: true,
                contentType: "application/json; charset=utf-8",
                url: "Code/Services/Dashboard/DashboardService.asmx/AccessRemoteData?",
                dataFilter: function(data) {
                    var msg = eval('(' + data + ')');
                    if (msg.hasOwnProperty('d'))
                        return msg.d;
                    else
                        return msg;
                },
                data:  { p_Term: 'd', p_Operator: 'StartsWith', p_LayoutName: layoutName } ,
                processResults: function (data) {
                         return {
                            results: data.items,
                            };
                        },
                        delay: 250,
                error: function() {
                    HideWaitMe();
                    alert("An error occurred");
                }
            }
    });

WebMethod 代码:

    <WebMethod(EnableSession:=True)>
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=False)>
    Public Function AccessRemoteData(p_Term As String, p_Operator As String, p_LayoutName As String) As String
        
        Dim serialiser As New JavaScriptSerializer()
        Dim listNode As Items
        Try
            Dim tableKey As Long = m_SqlCo.GetLayout(p_LayoutName).TableKey
            listNode = m_DashboardManager.SearchRlinkNames(p_Operator, tableKey, p_Term)
        Catch ex As Exception
            Dim msg As New TError(Nothing, "Error", TSz.MsgLevelEnum.ErrorLevel, TSz.MsgTypeEnum.OtherType, "SearchService.SearchInFieldStatistics " & "An error occured while loading species", True)
            WriteLog(msg)
            'response.Success = False
            SessionStateManager.TitleMessage = "Error"
            SessionStateManager.InfoMessage = String.Format("An error occurred while loading list of names. Message:{0}", ex.Message)
            'response.Url = "BioloMicsInfo.aspx"
            SessionStateManager.GoToLoginPage = False
            Return serialiser.Serialize(False)
        End Try

        Return JsonConvert.SerializeObject(listNode)

    End Function

它有效,但我的问题是当我想使用与文档中相同的方法时:

data: function (params) {
    var aa = {
        //term: params.term
        p_Term: params.term, // search term
        p_Operator: 'StartsWith',
        p_LayoutName: layoutName
    };
    return aa;
},

我的请求有误

exception: System.ArgumentException

message:Primitive JSON non valide : p_Operator.

stackstrace:` à System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()

à System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)

à System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)

à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)

à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)

à System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)

à System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)

à System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)`

你能帮我解决我的问题吗?因为我不知道如何获取输入字符串以将其传递给我的服务以 return data.

我不知道怎么解释,但是当我把它改成

data: function (params) {
                            var aa = {
                                //term: params.term
                                p_Term: params.term, // search term
                                p_Operator: 'StartsWith',
                                p_LayoutName: layoutName
                            };
                            return JSON.stringify(aa);
                            },

添加 json.stringify 添加

没有任何问题
minimumInputLength: 1