使用 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
我打算使用 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