1

テキスト ボックスと JQuery AutoComplete 機能をバインドしようとしています。Firebug AJAX Request & Response を確認すると、次のように返されます。しかし、テキストボックスにはアイテムが表示されていません。私が間違っていることを教えてください。ありがとう。

ここに画像の説明を入力 これが私のコーディングです:

$("#<%= TextBox1.ClientID %>").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/contractors/web_services/wsSM.asmx/SearchDrugs",
                    type: "POST",
                    dataType: "json",
                    data: {
                        'LocationID': "10543",
                        'Search': request.term
                    },
                    success: function (data) {                        
                        response($.map(data.d, function (item) {

                            return {
                                value: item.FullDrugName,
                                id: item.DrugID
                            }
                        }))
                    }
                });
            },
            delay: 1,
            minLength: 2,
            select: function (event, ui) {
                alert(ui.item.id);
            }
        });
4

2 に答える 2

1

DataType プロパティは、サーバーから返されると予想されるデータのタイプを表しています。データ型をjsonとして定義しますが、サーバーはxml出力を返します。DataType プロパティを xml に変更する必要があります

于 2012-12-27T15:57:41.157 に答える
0

@fealin's answerに加えて、xml 応答の処理方法を変更する必要があります。返されたデータにプロパティがあるようには見えませんd。また、XML 構造で正しいノードを探し、それらのテキストを引き出して、ウィジェットに返す応答配列を作成する必要があります。

提供された XML に基づいて、次のようになります。

$("#<%= TextBox1.ClientID %>").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "/contractors/web_services/wsSM.asmx/SearchDrugs",
            type: "POST",
            dataType: "json",
            data: {
                'LocationID': "10543",
                'Search': request.term
            },
            success: function (data) {                        
                response($(data).find("Drug").map(function (_, el) {
                    var $el = $(el);
                    return {
                        label: $el.find("FullDrugName").text(),
                        value: $el.find("DrugID").text()
                    };
            }));
        });
    },
    delay: 1,
    minLength: 2,
    select: function (event, ui) {
        alert(ui.item.id);
    }
});

XML 文字列のみを使用する例を次に示します (AJAX 要求なし): http://jsfiddle.net/J5rVP/29/

于 2012-12-27T16:31:24.007 に答える