Web 服务显示 Jquery 令牌输入结果的正确响应应该是啥?
Posted
技术标签:
【中文标题】Web 服务显示 Jquery 令牌输入结果的正确响应应该是啥?【英文标题】:What should be the correct response from web service to display the Jquery token input results?Web 服务显示 Jquery 令牌输入结果的正确响应应该是什么? 【发布时间】:2012-11-13 13:49:33 【问题描述】:我正在使用 Jquery Token Input 插件。我试图从数据库而不是本地数据中获取数据。我的 web 服务返回的 json 结果被包装在 xml 中:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">["id":"24560","name":"emPOWERed-Admin","id":"24561","name":"emPOWERed-HYD-Visitors"]</string>
我已在网站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<DistributionList> DLObj = new List<DistributionList>();
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 代码的头部以显示我包含的库文件:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="../Styles/jquery-ui-1.8.20.custom.css" rel="stylesheet" type="text/css" />
<link href="../Styles/token-input.css" rel="stylesheet" type="text/css" />
<link href="../Styles/token-input-facebook.css" rel="stylesheet" type="text/css" />
<script src="Scripts/Lib/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery.tokeninput.js" type="text/javascript"></script>--%>
<script src="DisplayTokenInput.js" type="text/javascript"></script>
<head>
【问题讨论】:
您是否在页面中添加了正确路径的 jquery.tokeninput.js 以及 jquery 和 css 文件 @rajeshkakawat 是的,我已经完成了......我现在已经在我的问题中包含了 aspx 代码的头部......请也检查一下...... 检查你的萤火虫控制台,是否显示一些错误 @rajeshkakawat 我检查了..它没有显示任何错误..它只是显示了我在问题中指定的响应..所以我猜响应的格式可能是错误的..我有提到了我的网络服务响应的格式..这是正确的响应吗? 如果这是您的 Web 服务返回的字符串,那就是问题所在 - 它是 XML 响应而不是 JSON。您的服务将您想要的搜索结果序列化为 JSON 字符串,然后将其包装在 XML 中。 【参考方案1】:您需要确保您的请求是 POST 请求。不是获取请求。请参阅此答案以了解有关原因的更多信息:How to let an ASMX file output JSON
【讨论】:
我认为你是对的,他使用的插件似乎根据 firebug 发送 get 请求。【参考方案2】:我假设插件的代码没有将 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 存储库:jquery.tokeninput.js
并在项目中的 js 文件副本中,更改行:
var DEFAULT_SETTINGS =
// Search settings
method: "GET",
到
var DEFAULT_SETTINGS =
// Search settings
method: "POST",
我还假设插件以忽略全局 jquery ajax 设置的方式构造查询,因此您不再需要包含我之前的 sn-ps。
【讨论】:
我应该在 $("#textboxid").tokenInput('PrivateSpace.asmx/GetDl_info', 完成了.. 我仍然得到相同的响应 如果您有 firebug 或 chrome,请使用控制台检查自动完成的 ajax 请求是否实际上是 POST 或 GET 请求。如果在添加上述代码后它们仍然是 GET 请求,那么您可能需要仔细查看令牌插件代码以了解它是如何构造 ajax 请求的。 看起来插件 js 文件中有一个设置,您可以更改以完成从 GET 到 POST 的更改。查看我的编辑 已检查.. Web 服务被称为 GET localhost:3696/SocialTask/Admin/PrivateSpace.asmx/…以上是关于Web 服务显示 Jquery 令牌输入结果的正确响应应该是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET MVC 3 中,Jquery 令牌输入未填充数据库中的值
用jquery怎么验证名字在输入完之后马上提示有没有重复的代码
Unity Web Request + Django:CSRF 令牌丢失或不正确