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

Posted

技术标签:

【中文标题】使用 select2 与 ajax 调用 asp.Net 服务自定义参数【英文标题】:Using select2 with ajax call to asp.Net service custom params 【发布时间】:2016-02-20 09:27:42 【问题描述】:

我想使用 select2 jQuery 插件,并想使用从 ajax 调用到 aspx.net WebMethod 的 AutoComplete

我的问题是如何在我的 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;
,

我的请求有错误

例外:System.ArgumentException

留言: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(字符串输入,Int32 depthLimit,JavaScriptSerializer 序列化器)

à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化器,字符串输入,类型类型,Int32 depthLimit)

à System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](字符串输入)

à System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer 序列化器)

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

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

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

【问题讨论】:

将 json.stringify 添加到数据元素中,它可以正常工作 【参考方案1】:

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

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

【讨论】:

以上是关于使用 select2 与 ajax 调用 asp.Net 服务自定义参数的主要内容,如果未能解决你的问题,请参考以下文章

无法让 select2.js ajax 与 asp.net webform 一起使用

Select2 与 Ajax Asp.net 4.0 webmethod 请求

从 ASP.Net 服务获取用于 select2 控件的 AJAX 结果

使用 ajax 和分页的带有 ASP 下拉列表控件的 Select2

在select2中使用ajax时无法获取自定义属性值

Select2 在调用时使用动态 Ajax URL