Web服务显示Jquery令牌输入结果的正确响应应该是什么?
我正在使用Jquery令牌输入插件。 我试图从数据库中获取数据而不是本地数据。 我的Web服务返回json结果包装在xml中:
[{"id":"24560","name":"emPOWERed-Admin"},{"id":"24561","name":"emPOWERed-HYD-Visitors"}]
我已经在http://loopj.com/jquery-tokeninput/网站上查了一下,该网站说该脚本应该按以下格式输出JSON搜索结果:
[ {"id":"856","name":"House"}, {"id":"1035","name":"Desperate Housewives"} ]
两者似乎都是相同的,但仍然没有得到我的页面中显示的项目。
我也发布了我的代码。 我的Js代码:DisplayTokenInput.js
$(document).ready(function() { $("#textboxid").tokenInput('PrivateSpace.asmx/GetDl_info', { hintText: "Type in DL Name", theme: "facebook", preventDuplicates: true, searchDelay: 200 }); });
我的网络服务代码:
[WebMethod] [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] public string GetDl_info(string q) { string dl_input = string.Empty; DataSet ds; PSData ObjDl = new PSData(); ds = ObjDl.GetDistributionList(q); List DLObj = new List(); foreach (DataRow datarow in ds.Tables[0].Rows) { DistributionList dl_list = new DistributionList(); dl_list.id = Convert.ToString(datarow["id"]); dl_list.name = Convert.ToString(datarow["name"]); DLObj.Add(dl_list); } dl_input = JsonConvert.SerializeObject(DLObj); return dl_input; } } public class DistributionList { public string id { get; set; } public string name { get; set; } }
我发布aspx代码的头部分来显示我已经包含的库文件:
Untitled Page --%>
您需要确保您的请求是POST请求。 不是获取请求。 请参阅此答案以了解有关原因的更多信息: 如何让ASMX文件输出JSON
我假设插件的代码没有为ajax请求设置内容类型为JSON,所以你可以在使用$ .ajaxSetup进行服务调用之前自己完成,即:
$.ajaxSetup({ contentType: "application/json; charset=utf-8" });
更新:显然asmx服务有时会出现’charset = utf-8’部分的问题,所以如果这不起作用,你可以试试’application / json’
更新2 :
我不认为这是导致问题的contentType,使用以下命令强制POST ajax请求,看看是否修复了它:
$.ajaxSetup({ type: "POST", contentType: "application/json; charset=utf-8" });
更新3 :
您正在使用的插件中有一个默认设置,可以将请求从GET更改为POST。 在这里看到它的GitHub repo: jquery.tokeninput.js
并在项目中的js文件副本中,更改行:
var DEFAULT_SETTINGS = { // Search settings method: "GET",
至
var DEFAULT_SETTINGS = { // Search settings method: "POST",
我还假设插件以无论如何忽略全局jquery ajax设置的方式构造查询,因此您不再需要包含我之前的代码片段。