1

我正在尝试绑定文本框和 JQuery 自动完成功能。当我检查 Firebug AJAX 请求和响应时,它返回如下。但是文本框没有显示任何项目。你能告诉我,我做错了什么吗?谢谢。

在此处输入图像描述 这是我的编码:

$("#<%= 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 的回答之外,您还需要更改处理 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 回答