Ajax与Servlet的数据交互

来源:互联网 发布:mac忘记开机密码办 编辑:程序博客网 时间:2024/05/21 16:57

/
*前记:暑假项目实训 会员管理平台
*选用技术:jsp+html+jquery
*某些地方需要用到异步处理
/

Servlet 与 Ajax 交换数据

Ajax知识

参见w3cschool:
http://www.w3school.com.cn/jquery/ajax_ajax.asp

正文

Ajax代码

  //异步处理事件  $("#lock").click(function(){            //定义数组存数据            var myArray=new Array(1,2,3);            var check=$("input[name='check']:checked");            for(var i=0;i<check.length;i++)            {                myArray[i]=check.eq(i).val();            }        //发送数据         $.ajax({               url:'pointServlet',   //请求地址            type:'post',   //请求方式            data:    //请求参数            {                'cradnumberarr':myArray            },               async : true, //默认为true 异步               error:function()   //默认为true 异步               {                   alert('error');               },               success:function(data)  //失败回调函数            {                alert('success');              }            });    });});

servlet代码

 public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException          {              // 设置响应内容类型              response.setContentType("text/html");              response.setCharacterEncoding("utf-8");//这里是转码                request.setCharacterEncoding("utf-8");//这里是转码                //获取内容并获取标识符判断进行什么操作              String markstring=request.getParameter("mark");              //获得请求的多维数组              Map<String, String[]> map=request.getParameterMap();              //标识操作的条数              int markcount=0;              //操作数据库              MemberDao me=MemberDaoFactory.getStudentDaoInstance();              String cardnumberarr[]=null;              Iterator<String> iter = map.keySet().iterator();              while (iter.hasNext())               {                    String key = iter.next();                    cardnumberarr =  (String[]) map.get(key);                        }                        for(String v:cardnumberarr)              {                                    System.out.print(v + "  ");              }                /**              *自身的业务逻辑              *最后定义一个PrintWriter 来返回数据              */               PrintWriter out = response.getWriter();//定义一个 out(用于写回去东西)              //以上是发送到客户端的相应类型                out.write("操作了"+markcount+"条数据");//返回到jsp页面                out.flush();//清空缓存                out.close();//关闭 out       }        

最后

在涉及跨域访问的时候需要用jsonp来处理ajax成功发送请求却一直进入error回调函数的问题

 $.ajax({     url: "跨域的url",     jsonpCallback: "showPrice",     jsonp: "callback",     // tell jQuery we're expecting JSONP     dataType: "jsonp",     data: {         q: "select title,abstract,url from search.news where query=\"cat\"",         format: "json"     },     // work with the response     success: function( data ) {         console.log( data ); // server response     } });

参数说明

dataType String

预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。在1.4中,JSON就会生成一个JavaScript对象,而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
“xml”: 返回 XML 文档,可用 jQuery 处理。
“html”: 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
“script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了”cache”参数。”’注意:”’在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
“json”: 返回 JSON 数据 。
“jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
“text”: 返回纯文本字符串

jsonp,

  重写jsonp请求中的回调函数的名称。至俄格值用来替代“callback=?”这种GET或POST请求URL参数里的“callback”部分,例如{jsonp:’onJsonPLoad’}会导致“onJsonPLoad”传递给服务器。

jsonpCallback,

  为jsonp指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。但是实际使用过程中,并不用写回调函数,比如此例中的showPrice,不写也不会报错,因为jQuery在处理JSONP的时候,自动帮你生成回调函数并且把数据取出来共success方法调用

0 0
原创粉丝点击