0

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

            });
    });

私の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; }
    }

含まれているライブラリ ファイルを表示するために、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 リクエストの content-type を JSON に設定していないので、$.ajaxSetup を使用してサービスを呼び出す前に自分で設定できます。

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

更新: どうやら asmx サービスには「charset=utf-8」の部分に問題がある場合があるため、それが機能しない場合は、「application/json」だけを試すことができます。

更新 2 :

問題の原因は contentType ではないと思います。次を使用して ajax リクエストに対して POST を強制し、これで問題が解決するかどうかを確認してください。

$.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 リクエストであることを確認する必要があります。get リクエストではありません。理由の詳細については、この回答を参照してください: ASMX ファイルに JSON を出力させる方法

于 2012-11-26T06:23:20.107 に答える