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怎么验证名字在输入完之后马上提示有没有重复的代码

如何从 jqgrid 发送 CSRF 令牌

Unity Web Request + Django:CSRF 令牌丢失或不正确

ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?

从jquery发送数据到wcf Web服务