使用asmx问题进行jQuery自动完成

时间:2010-12-24 09:09:16

标签: jquery web-services autocomplete

我有一个奇怪的问题。我正在尝试使用asmx web服务的jQuery自动完成。我的JavaScript代码如下:

$('#txtUsers').autocomplete('AjaxHandler.asmx/GetUserData', {
    width: 320,
    max: 5,
    minChars: 3,
    parse: function(data) {
        var items = data.d;
        var parsed = [];
        for (var i = 0; i < items.length; i++)
            parsed.push({
            data: [items[i]],
            value: items[i],
            result: [items[i]]
        });
        return parsed;
    }
});

我的网络服务代码是:

[WebService]
[ScriptService]
public class AjaxHandler : WebService
{
    [WebMethod]
    public List<UserData> GetUserData(string q)
    {
        //My code here.....
    }
}

但是我的Web方法没有从自动完成中调用。但是每当我尝试从jQuery.ajax调用相同的web方法时,它都会被正确触发。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

是的,我也支持这个问题。 ScriptService和ScriptMethod都不能帮助自动完成。最简单的解决方法是将 .asmx 转换为 .ashx ,并在JSON序列化程序的帮助下管理AJAX插件所期望的返回结果。

答案 1 :(得分:1)

我检查了自动填充发送获取请求,但您的服务只接受发布请求。所以,我发现你也找到了它。

我建议使用简单的HttpHandler,并使用newton json serializer将数据作为json返回,因为您的Web服务重新“包装”了数据。 它应该是非常简单的处理程序:

List<UserData> items = GetUserDataItems();
string json = JsonConvert.SerializeObject(items);

//将json回到客户端

同样在客户端代码中将dataType设置为json:

dataType: "json",

并解析如下:

parse: function (data) {
    return $.map(data, function (row, i) {
        return {
            data: row,
            value: row,
            result: row
        }
    });
},