• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    比较Ajax的三种实现及JSON解析

    本文主要是比较三种实现Ajax的方式,为以后的学习开个头。

    准备:

    1、  prototype.js
    2、  jquery1.3.2.min.js
    3、  json2.js

    后台处理程序(Servlet),访问路径servlet/testAjax:

    Java代码

    package ajax.servlet; 
    import java.io.IOException; 
    import java.io.PrintWriter; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
    /** 
     * Ajax例子后台处理程序 
     * @author bing 
     * @version 2011-07-07 
     * 
     */ 
    public class TestAjaxServlet extends HttpServlet { 
      public void doGet(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        response.setContentType("text/html;charset=utf-8"); 
        PrintWriter out = response.getWriter(); 
        String name = request.getParameter("name"); 
        String age = request.getParameter("age"); 
        System.out.println("{\"name\":\"" + name + "\",\"age\":\"" + age + "\"}"); 
        out.print("{\"name\":\"" + name + "\",\"age\":" + age + "}"); 
        out.flush(); 
        out.close(); 
      } 
      public void doPost(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException { 
        doGet(request,response); 
      } 
    } 

    TestAjaxServlet接收两个参数:name和age,并返回一个以JSON格式编写的字符串。

    前台页面参数输入界面:

    Html代码 

    div id="show">显示区域/div> 
    div id="parameters"> 
      name:input id="name" name="name" type="text" />br /> 
      age:input id="age" name="age" type="text" />br /> 
    /div> 

    一、prototype实现

    Html代码

    script type="text/javascript" src="prototype.js">/script> 
      script type="text/javascript"> 
        function prototypeAjax() 
        {     
        var url = "servlet/testAjax";//请求URL 
        var params = Form.serialize("parameters");//提交的表单 
       var myAjax = new Ajax.Request( 
        url,{ 
          method:"post",// 请求方式  
          parameters:params, // 参数 
          onComplete:pressResponse, // 响应函数 
          asynchronous:true 
        }); 
        $("show").innerHTML = "正在处理中..."; 
        } 
        function pressResponse(request) 
        { 
        var obj = request.responseText; // 以文本方式接收 
        $("show").innerHTML = obj; 
        var objJson = request.responseText.evalJSON(); // 将接收的文本用解析成Json格式 
        $("show").innerHTML += "name=" + objJson['name'] + " age=" + objJson['age']; 
        } 
    /script> 
    input id="submit" type="button" value="提交" onclick="prototypeAjax()" />br /> 

    在prototype的Ajax实现中,用evalJSON方法将字符串转换成JSON对象。

    二、jquery实现

    Html代码 

    script type="text/javascript" src="jquery-1.3.2.min.js">/script> 
    script type="text/javascript" src="json2.js">/script> 
    input id="submit" type="button" value="提交" />br /> 
    script type="text/javascript"> 
        function jqueryAjax()   
        {   
          var user={"name":"","age":""};   
          user.name= $("#name").val();   
          user.age=$("#age").val();  
          var time = new Date();      
          $.ajax({   
             url: "servlet/testAjax?time="+time,   
             data: "name="+user.name+"age="+user.age,   
             datatype: "json",//请求页面返回的数据类型   
             type: "GET",   
             contentType: "application/json",//注意请求页面的contentType 要于此处保持一致   
             success:function(data) {//这里的data是由请求页面返回的数据  
             var dataJson = JSON.parse(data); // 使用json2.js中的parse方法将data转换成json格式  
             $("#show").html("data=" + data + " name="+dataJson.name+" age=" + dataJson.age);   
             },   
             error: function(XMLHttpRequest, textStatus, errorThrown) {   
              $("#show").html("error"); 
             }   
          });   
        } 
        $("#submit").bind("click",jqueryAjax); // 绑定提交按钮 
     /script> 

    刚接触jQuery,在json的处理上借助了json2.js。还请前辈们指教。。

    三、XMLHttpRequest实现

    Html代码 

    script type="text/javascript"> 
        var xmlhttp;  
        function XMLHttpRequestAjax()  
        { 
          // 获取数据 
         var name = document.getElementById("name").value;  
           var age = document.getElementById("age").value;  
         // 获取XMLHttpRequest对象 
         if(window.XMLHttpRequest){ 
          xmlhttp = new XMLHttpRequest();  
         }else if(window.ActiveXObject){  
          var activxName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];   
          for(var i = 0 ; i  activexName.length; i++){ 
            try{ 
              xmlhttp = new ActiveXObject(activexName[i]);  
              break;  
            }catch(e){} 
          } 
         } 
           xmlhttp.onreadystatechange = callback; //回调函数 
           var time = new Date();// 在url后加上时间,使得每次请求不一样 
           var url = "servlet/testAjax?name="+name+"age="+age+"time="+time; 
           xmlhttp.open("GET",url,true); // 以get方式发送请求 
           xmlhttp.send(null);  // 参数已在url中,所以此处不需要参送 
        }    
        function callback(){   
          if(xmlhttp.readyState == 4){   
           if(xmlhttp.status == 200){ // 响应成功  
             var responseText = xmlhttp.responseText;  // 以文本方式接收响应信息 
             var userdiv = document.getElementById("show"); 
             var responseTextJson = JSON.parse(responseText); // 使用json2.js中的parse方法将data转换成json格式  
             userdiv.innerHTML=responseText + " name=" + responseTextJson.name + " age=" + responseTextJson.age; 
           } 
          }     
        } 
    /script> 
    input id="submit" type="button" value="提交" onclick="XMLHttpRequestAjax()" />br /> 

    ps:字符串转换成JSON的三种方式

    采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON )。
    ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。

    1,eval方式解析,恐怕这是最早的解析方式了。

    function strToJson(str){
       var json = eval('(' + str + ')');
       return json;
    } 

    记得str两旁的小括号哦。

    2,new Function形式,比较怪异哦。

    function strToJson(str){
      var json = (new Function("return " + str))();
      return json;
    } 

    IE6/7中当字符串中含有换行(\n)时,new Function不能解析,但eval却可以。

    3,使用全局的JSON对象。

    function strToJson(str){
      return JSON.parse(str);
    } 

    目前IE8(S)/Firefox3.5+/Chrome4/Safari4/Opera10 已实现了该方法。

    使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

    var str = '{name:"jack"}';
    var obj = JSON.parse(str); // --> parse error 

    name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题。

    您可能感兴趣的文章:
    • 浅析JSONP解决Ajax跨域访问问题的思路详解
    • 深入浅析Jsonp解决ajax跨域问题
    • Ajax的jsonp方式跨域获取数据的简单实例
    • 一种Javascript解释ajax返回的json的好方法(推荐)
    上一篇:分享ajax的三种解析模式
    下一篇:探讨.get .post .ajax ztree 还有后台servlet传递数据的相关知识
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    比较Ajax的三种实现及JSON解析 比较,Ajax,的,三种,实现,