这几天在研究JQuery和WebService,被泛型返回类型搞死了。查了很多资料做实验终于搞定了。网上很多垃圾文章的作者都不亲手实验就到处拼凑把东西发上来,太不负责了。下面我发的是100%可用的,经过亲手实验的代码。
首先在WebService上要注意一点,一定记得把[System.Web.Script.Services.ScriptService]这行取消注释,这样脚本才可以调用到WebService。如图:

我用来测试的是我网站的友情链接列表,其WebService方法如下:
[WebMethod]
public List<EdiBlog.Core.DataModel.FriendLink> GetFriendLinks()
{
return new EdiBlog.Core.FriendLink().GetModelList();
}
经过测试,在浏览器中用GET访问是会爆掉的,所以我们用POST方法去调用。在默认的IIS和ASP.NET环境下,手动访问“SystemService.asmx?op=GetFriendLinks”然后点击Invoke按钮。会得到如下的结果,它是一个泛型的友情链接列表:

现在服务已经证明可用了,我们可以写JQuery脚本了。
JQuery方法:
$(document).ready(function () {
$.ajax({
type: "POST",
url: "/API/SystemService.asmx/GetFriendLinks",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var html = '';
html += '<ul>';
$(result.d).each(function () {
html += "<li><a href='" + this["Url"] + "'>" + this["Title"] + "</a></li>";
});
html += '</ul>';
jQuery('#result').append(html);
},
error: OnError
});
});
function OnError(request, status, error)
{
$("#result").html(request.statusText);
}
上面的脚本有几点要注意:
1. type一定要是POST
2. data = "{}"的意思是这个方法不需要参数,即参数为空
3. dataType 和 contentType 一定要为JSON
至于HTML代码,则很简单,只需要一个空的div就可以了,id为result:
<div id="result"> </div>
最后运行结果如下:
