这几天在研究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>
最后运行结果如下: