jQuery_review之使用$.getScript()以及$.getJSON回与服务端进行异步信息交互
jQuery_review之使用$.getScript()以及$.getJSON来与服务端进行异步信息交互
jQuery还提供了两个非常实用的方法,分别是$.getScript()以及$.getJSON()。这个两个方法非常之重要,假设我们现在要编写一个框架,如果能在后台控制前台表格的动作,我们应该怎么做?肯定是要在后台向前台发送一个JavaScript,从而让前台的JavaScript执行,当然有很多方法,比如创建一个Script的节点放在DOM树中,或者是在HTML中增加一个<script>节点,都是解决这个问题的方法。但是getScript也不失是解决这个问题的一个很好地方案。
jQuery还提供了两个非常实用的方法,分别是$.getScript()以及$.getJSON()。这个两个方法非常之重要,假设我们现在要编写一个框架,如果能在后台控制前台表格的动作,我们应该怎么做?肯定是要在后台向前台发送一个JavaScript,从而让前台的JavaScript执行,当然有很多方法,比如创建一个Script的节点放在DOM树中,或者是在HTML中增加一个<script>节点,都是解决这个问题的方法。但是getScript也不失是解决这个问题的一个很好地方案。
此外,现在JSON由于书写简便,传输数据比较小,数据冗余度好,而慢慢的大有取代XML的形式。Google也提供了很多第三方的可靠的json转换的解决方案。所以json的威力还是不能小瞧的。
使用jQuery的这两个方案,有几个要注意的点:这两个方法$.getScript()以及$.getJSON()都有两个参数,第一个参数是提供给jQuery向什么地址寻求资源,第二个就是资源返回之后,会提供什么样子的函数来调用上面的资源,第一个回调函数是用来执行上面的JavaScript方法中的函数,第二个回调函数则是用来解析刚刚获取的JSON的字符串。此外,JSON的格式是这样的{"name1":"value1","name2":"value2"},请注意里面的不是单引号,而是双引号,如果写成引号,可能会导致jquery无法解析上面的JSON字符串。最后,如何解析JSON?data['name1']以及使用$.each(data,function(idx,item){})来进行解析,要根据JSON的格式不同选择正确的解析方式。
前端的DEMO代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript" src="jquery-1.8.3.js"></script> <script type="text/javascript"> $(function(){ $("#getContent").click(function(){ $.getScript("czz.js",function(){ alertHtml($("#showText")); }) }); $("#getJson").click(function(){ $.getJSON("test?name=czz&address=dszy",function(data){ var str = data['name']+" "+data['address']; $("#showText").empty().text(str); }); }); }); </script> </head> <body> <div id="showText"><span>He who hesitates is lost.</span></div> <input type="button" id="getContent" value="getAjax"> <input type="button" id="getJson" value="getJson"> </body> </html>
后端的DEMO代码如下:
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String address = req.getParameter("address"); StringBuffer sb = new StringBuffer(""); sb.append("{\"name\":\"") .append(name) .append("_czz\",\"address\":\"") .append(address) .append("_czz\"}"); resp.setContentType("html/JSON;charset=utf-8"); resp.getWriter().print(sb.toString()); }
程序中调用的JS代码如下:
function alertHtml(e){ alert(e.html()); }