ajax

ajax不是一种新的编程语言,是指一种对网页某部分进行更新的技术,局部刷新,多个事件并行发生 ,事件不会相互影响,请求之后不刷新整张页面,页面不动,只是刷新页面的局部。
它的核心对象是XMLHttpRequest 是一个JavaScript对象 存在浏览器差异。当服务器端的响应不是简单的字符串类型而是集合或者对象时,则无法将对象响应给客户端 这时候 就用到了json 需要将对象以json字符串的形式响应给ajax。对应响应为对象类型的json字符串,响应内容不能直接使用,这时候需要将json字符串转化为js对象才可以在js中使用:success:function(result){
var user = $.parseJSON(result);// 将json字符串转化为js对象
alert(user.id);//获取js对象中的值
}

Paste_Image.png

1.fastjson将对象转换为json

String json = JSONObject.toJSONStringWithDateFormat(user,"yyyy年MM月dd日");

2.将json输出到后台

HttpServletResponse resp = new ServletActionContext.getResponse();
// 设置响应头
resp.setContentType("application/json;charset=UTF-8");
resp.getWriter().print(json);

3.gson将 集合转换json字符串

//Gson转换对象为json字符串
        /*String json2 = new Gson().toJson(user);
        System.out.println(json2);*/
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        String json2 = gson.toJson(list);
        System.out.println(json2);

4.ajax核心xhr get请求 及流程

<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
  <script type="text/javascript">
      $(function(){
          //给用户名注册失去焦点事件
          $("#name").blur(function(){
              var username = $(this).val();
              //1.创建xhr
              var xhr;
              if(window.XMLHttpRequest){
                 xhr = new XMLHttpRequest();
              }else{
                 xhr = new ActiveXObject("Microsoft.XMLHTTP");
              }
              //2.发送请求并传递参数
              xhr.open("GET","/ajax_day1/user/checkUsername?username="+username);
              xhr.send();
              //3.处理响应(完整正确的响应)
              xhr.onreadystatechange = function(){
                //处理完整  正确
                if(xhr.readyState==4 && xhr.status==200){
                    //alert(xhr.responseText);
                    $("#usernameMessage").text(xhr.responseText);
                }
             }
          });
      
      
      
      
      });
  
  </script>
 </head>
  
  <body>
  
    <form method="post" action="" enctype="application/x-www-form-urlencoded">
        用户名:<input type="text" id="name" name="name" /><span id="usernameMessage"></span><br/>
        密码:<input type="text" name="password" /><br/>
        <input type="submit" value="提交" /><br/>
    </form>
  </body>

一些小知识点:
1.$("#usernameMessage").html("<font color='red'>"+result+"</font>");
2.<form method="post" action="" enctype="application/x-www-form-urlencoded">
注意:enctype
3.将json字符串转为js对象 eval 与 append的运用

                       //result 是一个json类型的字符串
                    //将json字符串转为js对象|数组
                    var jsObject = eval("("+result+")");
                    var nameLi = $("<li></li>").text("姓名:"+jsObject.name);
                    var ageLi = $("<li></li>").text("年龄:"+jsObject.age);
                    var birLi = $("<li></li>").text("生日:"+jsObject.bir);
                    
                    //添加
                    $("#ul").append(nameLi).append(ageLi).append(birLi);
                    
                    //显示
                    $("#ul").show(2000);



 <body>
   <input type="button" id="btn" value="通过ajax展示一个人"/><br/>
   <ul id="ul" style="display: none;">
     
   </ul>
   
  </body>

5.Jquery框架封装的ajax发送ajax请求
$.ajax
$.post
$.get

<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
  <script type="text/javascript">
      $(function(){
      
          /*    $("#btn").click(function(){
            
            }); */
            //live 既可以给页面中原有的标签注册事件 也可以给生成的标签注册事件
            $("#btn").live("click",function(){
                //发送ajax异步请求
                /* $.ajax({
                    type:"POST",
                    url :"/ajax_day2/user/findUser",
                    dataType:"JSON",//预期数据为json   text/plain  text    application/json  json     text/xml application/xml   xml
                    success:function(result){
                        $("#ul").empty().hide(1000);
                        console.log(result);
                        //当服务器端的响应类型设置为application/json时 jquery框架自动将json字符串转换为js对象|数组
                        //当服务器端没有设置响应类型 但是在ajax中设置了dataType属性为json时 Jquery框架也会自动将结果转换为js对象|数组
                        //注意:当服务器端没有设置响应类型时 且 ajax函数中没有设置dataType时   result一定是json字符串 使用时需要转为js对象|数组处理
                        //推荐:使用 后端服务器设置相应类型   并且  前端ajax函数中设置dataType 属性  
                        var nameLi = $("<li></li>").text("姓名:"+result.name);
                        var ageLi = $("<li></li>").text("年龄:"+result.age);
                        var birLi = $("<li></li>").text("生日:"+result.bir);
                        $("#ul").append(nameLi).append(ageLi).append(birLi).show(2000);
                    }
                }); */
                /* $.get("/ajax_day2/user/findUser",function(result){
                    $("#ul").empty().hide(1000);
                    var nameLi = $("<li></li>").text("姓名:"+result.name);
                    var ageLi = $("<li></li>").text("年龄:"+result.age);
                    var birLi = $("<li></li>").text("生日:"+result.bir);
                    $("#ul").append(nameLi).append(ageLi).append(birLi).show(2000);
                },"JSON"); */
                 $.post("/ajax_day2/user/findUser","name=zhangsan",function(result){
                    $("#ul").empty().hide(1000);
                    var nameLi = $("<li></li>").text("姓名:"+result.name);
                    var ageLi = $("<li></li>").text("年龄:"+result.age);
                    var birLi = $("<li></li>").text("生日:"+result.bir);
                    $("#ul").append(nameLi).append(ageLi).append(birLi).show(2000);
                },"JSON"); 
            });
      
      });
  </script>
 </head>
  
  <body>
  
   <input  type="button" id="btn" value="展示一个人"/><br/>
   <ul id="ul" style="display: none;">
    
   </ul>
  </body>

6.省市县 三级联动

<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
  <script type="text/javascript">
    $(function(){
          
          //发送ajax请求加载所有省份信息
          $.ajax({
            type:"POST",
            url:"user/queryProvinces",
            dataType:"JSON",
            success:function(result){
                console.log(result);
                //遍历省份信息
                /* $.each(result,function(i,province){
                    var poption = $("<option></option>").text(province.name).val(province.code);
                    $("#sheng").append(poption);
                }); */
                createOption(result, $("#sheng"));
                //省的下拉列表改变
                $("#sheng").change();
            }
          });   
          
          //当省份的下拉列表改变
          $("#sheng").change(function(){
                $("#shi").empty();
                //获取当前选中的option属性的值 value
                var provinceCode = $(this).val();
                //console.log(provinceCode);
                //发送ajax请求传递省份的编号到后台
                $.get("user/queryCitys",{"provinceCode":provinceCode},function(result){
                    /* $.each(result,function(i,city){
                        var coption = $("<option></option>").text(city.name).val(city.code);
                        $("#shi").append(coption);
                    }); */
                    createOption(result, $("#shi"));
                    //市的下拉列表改变
                    $("#shi").change();
                },"JSON");
          });
          
          
          //当市改变发送ajax其请求获取当前市下的所有县
          
          $("#shi").change(function(){
            $("#xian").empty();
            var cityCode = $(this).val();
            
            //发送post请求根据市的编号查询所有县
            $.post("user/queryAreas","cityCode="+cityCode,function(result){
                /* $.each(result,function(i,area){
                    var xoption = $("<option></option>").text(area.name).val(area.code);
                    $("#xian").append(xoption);
                }); */
                createOption(result, $("#xian"));
            },"JSON");
          });
    });
    
    function  createOption(result,parent){
        $.each(result,function(i,res){
            var coption = $("<option></option>").text(res.name).val(res.code);
            parent.append(coption);
        });
    }
  </script>
  
  
  </head>
  
  <body>
        省:<select id="sheng"></select>
        市:<select id="shi"></select>
        县:<select id="xian"></select>
  </body>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • AJAX 原生js操作ajax 1.创建XMLHttpRequest对象 var xhr = new XMLHtt...
    碧玉含香阅读 3,148评论 0 7
  • Ajax的基本概念及使用 同步&异步 同步:必须等待前面的任务完成,才能继续后面的任务; 异步:不受当前主要任务的...
    magic_pill阅读 1,933评论 0 5
  • Ajax准备知识:json 什么是json? 定义: JSON(JavaScript Object Notatio...
    lkning阅读 936评论 0 2
  • 一)什么是JavaScript JS是什么?(1) 基于对象JS本身就有一些现成的对象可供程序员使用,例如:Arr...
    奋斗的老王阅读 1,511评论 0 49
  • Ajax 模块也是经常会用到的模块,Ajax 模块中包含了 jsonp 的现实,和 XMLHttpRequest ...
    对角另一面阅读 584评论 0 1