0

我正在使用 Jquery 令牌输入插件。我试图从数据库而不是本地数据中获取数据。我的 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>
4

2 回答 2

1

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

于 2012-11-26T06:20:14.403 回答
1

您需要确保您的请求是 POST 请求。不是获取请求。请参阅此答案以了解有关原因的更多信息:如何让 ASMX 文件输出 JSON

于 2012-11-26T06:23:20.107 回答