C# web服务的正确响应应该是什么来显示Jquery令牌输入结果?

C# web服务的正确响应应该是什么来显示Jquery令牌输入结果?,c#,jquery,web-services,jquery-plugins,jquery-tokeninput,C#,Jquery,Web Services,Jquery Plugins,Jquery Tokeninput,我正在使用Jquery令牌输入插件。我试图从数据库中获取数据,而不是本地数据。My web service返回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"}]&l

我正在使用Jquery令牌输入插件。我试图从数据库中获取数据,而不是本地数据。My web service返回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>
这两个看起来是一样的,但我仍然没有在我的页面中显示项目

我张贴我的代码也。 我的Js代码:DisplayTokenInput.Js

 $(document).ready(function() {
     $("#textboxid").tokenInput('PrivateSpace.asmx/GetDl_info', {

            hintText: "Type in DL Name", theme: "facebook",
            preventDuplicates: true,
            searchDelay: 200

            });
    });
我的web服务代码:

[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; }
    }
[WebMethod]
[ScriptMethod(UseHttpGet=true,ResponseFormat=ResponseFormat.Json)]
公共字符串GetDl_info(字符串q)
{
string dl_input=string.Empty;
数据集ds;
PSData ObjDl=新PSData();
ds=ObjDl.GetDistributionList(q);
List DLObj=新列表();
foreach(ds.Tables[0].行中的DataRow DataRow)
{
DistributionList dl_list=新的DistributionList();
dl_list.id=Convert.ToString(datarow[“id]”);
dl_list.name=Convert.ToString(datarow[“name]”);
数据对象添加(数据对象列表);
}
dl_input=JsonConvert.SerializeObject(DLObj);
返回dl_输入;
}
}
公共阶级分配论者
{
公共字符串id{get;set;}
公共字符串名称{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>

无标题页
--%>

我假设插件的代码没有将ajax请求的内容类型设置为JSON,因此您可以在服务调用之前使用$.ajaxie设置自己:

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});
更新:显然,asmx服务有时会在“charset=utf-8”部分出现问题,所以如果这不起作用,您可以尝试使用“application/json”

更新2

我不认为是contentType导致了这个问题,请使用以下命令强制发布ajax请求,看看这是否可以解决这个问题:

$.ajaxSetup({
  type: "POST", contentType: "application/json; charset=utf-8"
});
更新3

您使用的插件中有一个默认设置,可以更改从GET到POST的请求。请参见GitHub repo上的以下内容:

在项目中js文件的副本中,更改以下行:

var DEFAULT_SETTINGS = {
    // Search settings
    method: "GET",


我还假设插件以忽略全局jquery ajax设置的方式构造查询,因此您不需要再包含我之前的代码片段。

您需要确保您的请求是POST请求。不是get请求。查看此答案以了解更多原因:

您是否在页面中添加了jquery.tokeninput.js和jquery及css文件,并使用了正确的path@rajeshkakawat是的,我已经做了。。。现在我的问题中已经包括了aspx代码的开头部分。。也请检查..检查你的firebug控制台,是否显示一些error@rajeshkakawat我查过。。它没有显示任何错误。。它显示了我在问题中指定的回答。。所以我猜回答的格式可能是错误的。。我已经提到了我的web服务响应的格式..这是正确的响应吗?如果这是web服务返回的字符串,那么这就是问题所在-它是XML响应而不是JSON。您的服务将您想要的搜索结果序列化为JSON字符串,然后将其包装为XML。我是否应该在$(“#textboxid”).tokenInput('PrivateSpace.asmx/GetDl_info'之前包含它,{完成了..我仍然得到了相同的响应如果你有firebug或chrome,请使用控制台检查自动完成的ajax请求是否实际是POST或GET请求。如果在添加上述代码后它们仍然是GET请求,那么你可能需要仔细查看令牌插件代码,以了解它是如何构造aj的ax请求。在插件js文件中似乎有一个设置,您可以更改它来完成从GET到POST的更改。请参阅我的editChecked。web服务称为GET,我想您是对的,他使用的插件似乎根据firebug发送GET请求。
var DEFAULT_SETTINGS = {
    // Search settings
    method: "GET",
var DEFAULT_SETTINGS = {
    // Search settings
    method: "POST",