使用 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 结果