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设置的方式构造查询,因此您不再需要包含我之前的代码片段。