做完这些之后,可以加载
http://localhost:7001/ajax-demo/dwr,看看哪些服务可用。结果如下:
图3. 可用的服务单击ajaxSampleS
vc链接,查看有关如何在HTML页面内直接使用服务的示例实现。其中包含的两个JavaScript文件完成了大部分的功能:
ajaxSampleS
vc.js是动态生成的:
function ajaxSampleS
vc() { }ajaxSampleS
vc.castVote = function(callback, p0){ DWREngine._execute(callback, /ajax-demo/dwr, ajaxSampleS
vc, castVote, p0);}
现在可以使用JavaScript对象ajaxSampleS
vc替换所有的XmlHttpRequest代码,从而重构raw-ajax.html文件。可以在dwr-ajax.html文件中看到改动的结果;下面是新的JavaScript函数:
function castVote(rank) { ajaxSampleS
vc.castVote(processResponse, rank);}function processResponse(data) { var voteText = "
Thanks for Voting!" + "
Current ranking: " + data.voteAverage + " out of 5" + "
Number of votes placed: " + data.numberOfVotes + ""; 502 502votes).innerHTML = voteText; }
惊人地简单,不是吗?由ajaxSampleS
vc对象返回的Article域对象序列化为一个JavaScript对象,允许在它上面调用诸如numberOfVotes()和voteAverage()之类的方法。在动态生成并插入到DIV 元素“votes”中的HTML代码内使用这些数据。
下一步工作
在后续文章中,
我将继续有关Ajax的话题,涉及下面这些方面:
* Ajax最佳实践
像许多技术一样,Ajax是一把双刃剑。对于一些用例,其应用程序其实没有必要使用 Ajax,使用了反而有损可用性。
我将介绍一些不适合使用的模式,突出说明Ajax的一些消极方面,并展示一些有助于缓和这些消极方面的机制。例如,对 Netflix电影浏览器来说,Ajax是合适的解决方案吗?或者,如何提示用户确实出了一些问题,而再次单击按钮也无济于事?
* 管理跨请求的状态
在使用Ajax时,最初的文档DOM会发生一些变化,并且有大量的页面状态信息存储在客户端变量中。当用户跟踪一个链接到应用程序中的另一个页面时,状态就丢失了。当用户按照惯例单击Back按钮时,呈现给他们的是缓存中的初始页面。这会使用户感到非常迷惑!
* 调试技巧
使用JavaScript在客户端执行更多的工作时,如果事情不按预期方式进行,就需要一些调试工具来帮助弄清出现了什么问题。
结束语
本文介绍了Ajax方法,并展示了如何使用它来创建一个动态且响应灵敏的Web应用程序。通过使用DWR框架,可以轻松地把Ajax融合到站点中,而无需担心所有必须执行的实际管道工作。
特别感谢Getahead IT咨询公司的Joe Walker和他的团队开发出DWR这样神奇的工具。感谢你们与世界共享它!
gigi_miao