我有一个奇怪的问题。我正在尝试使用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方法时,它都会被正确触发。有什么帮助吗?
答案 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
}
});
},