1.介绍Ajax

Ajax = 异步 JavaScript 和 XML

Ajax是一种创建快速动态网页的技术

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以不用整个页面进行刷新而是可以进行局部刷新。这也是使用Ajax 的优点而传统页面如果要更新内容,必须重载整个网站页面。

1.1什么是同步,什么是异步

  • 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态
  • 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随 意做其他事情,不会被卡死

1.2Ajax的运行原理

  页面发起请求,会将请求发送给浏览器内核中的 Ajax 引擎,Ajax 引擎会提交请求到服务器端,在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回 给Ajax引擎后,会触发你设置的事件,从而执行自定义的js逻辑代码完成某种页面1 功能。

2.JS原生的Ajax技术

  js 原生的 Ajax 其实就是使用浏览器内置的 Ajax 引擎,要使用 js 原生的 Ajax 完成异步操作,有如下几个步骤:

  1. 创建Ajax引擎对象
  2. 为Ajax引擎对象绑定监听(监听服务器已将数据响应给引擎)
  3. 绑定提交地址
  4. 发送请求
  5. 接受响应数据

通过异步访问服务器

 function fun1() {
//1.创建ajax引擎对象----所有的操作都是通过引擎对象
var xmlHttp = new XMLHttpRequest(); //2.绑定监听---- 监听服务器是否已经返回响应
xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
//5.接收相应数据
var res = xmlHttp.responseText;
//alert(res);
document.getElementById("span1").innerHTML = res;
}
}
//3.绑定地址
xmlHttp.open("GET", "/WEB22/ajaxServlet?name=lisi", true);
//4.发送请求
xmlHttp.send();
}

需要注意的是 open 方法第三个参数可以控制是否异步,true是异步,false是同步下面是通过同步访问服务器

 function fn2() {
//1.创建ajax引擎对象----所有的操作都是通过引擎对象
var xmlHttp = new XMLHttpRequest(); //2.绑定监听---- 监听服务器是否已经返回响应
xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
//5.接收相应数据
var res = xmlHttp.responseText;
//alert(res);
document.getElementById("span2").innerHTML = res;
}
}
//3.绑定地址
xmlHttp.open("POST", "/WEB22/ajaxServlet", false);
//4.发送请求
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send("name=wangwu");
}

此时GET和POST需要注意的是GET可以在直接在服务器使用 request.getParameter("name") 的方式来获取,而POST需要处理一下需要修改一下请求头如上面18行代码,然后在在通过发送send() 方法发送到服务器,发送内容可以写到参数里。

3.Json介绍

因为下面需要使用到Json所以我们先来说一下 Json 刚开始不了解的时候以为是一个很难的东西,但学过之后才发现原来是啦么简单,Json是一种取代 XML 的数据结构,和 XML 相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。说白了Json就是数据的一种交换方式。

3.1Json的格式与解析

Json有两种格式:

  • 对象格式:{"key1":obj,"key2":obj,"key3":obj...}
  • 数组/集合格式:[obj,obj,obj...]

eg:user 对象 用 json 数据表示

对象格式:

{"username":"zhr","age":21,"password":"1234","addr":"北京"} 

数组格式var json = {

"shuzu1" : [
{
"name" : "小双",
"age" : 28,
"addr" : "扬州"
},
{
"name" : "建宁",
"age" : 18,
"addr" : "四川"
},
{
"name" : "阿珂",
"age" : 10,
"addr" : "山西"
}
],
"shuzu2" : [
{
"name" : "张爽",
"age" : 25,
"addr" : "吉林"
},
{
"name" : "建",
"age" : 18,
"addr" : "四"
},
]
}; alert(json.shuzu1[1].name);//建
var json = {
"key1" : "value1",
"key2" : {
"name" : "小双",
"age" : 28,
"addr" : "扬州"
},
"key3" : [
{
"name" : "小双",
"age" : 28,
"addr" : "扬州"
},
{
"name" : "小双",
"age" : 28,
"addr" : "扬州"
},
{
"name" : "小双",
"age" : 28,
"addr" : "扬"
}
]
};
alert(json.key1); //value1
alert(json.key2.age);   //28
alert(json.key3[2].addr); //扬

3.2Json 的转换插件

将java的对象或集合转成json形式字符串

json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串。
常用的json转换工具有如下几种:

  • jsonlib
  • Gson:google
  • fastjson:阿里巴巴

4.Jquery的Ajax技术

  jquery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操 作方法更简洁,功能更强大,与ajax操作相关的jquery方法有如下几种,但开发中 经常使用的有三种

     1.$.get(url, [data], [callback], [type])

     2.$.post(url, [data], [callback], [type])

其中:

  • url:代表请求的服务器端地址
  • data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)
  • callback:表示服务器端成功响应所触发的函数(只有正常成功返回才执行)
  • type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换)
  • 常用的返回类型:text、json、html等

   3.$.ajax( { option1:value1,option2:value2... } );

常用的option有如下:

  • async:是否异步,默认是true代表异步
  • data:发送到服务器的参数,建议使用json格式
  • dataType:服务器端返回的数据类型,常用text和json
  • success:成功响应执行的函数,对应的类型是function类型
  • type:请求方式,POST/GET
  • url:请求服务器端地址

jquery_ajax.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript">
function fn1(){
//get异步访问服务器
$.get(
"/WEB22/ajaxServlet2",//url地址
{"name":"张三","age":25},//请求参数
function(data){//执行成功后的回调函数
alert(data.name);
},
"json"
);
}
function fn2(){
//post异步访问服务器
$.post(
"/WEB22/ajaxServlet2",//url地址
{"name":"张三","age":25},//请求参数
function(data){//执行成功后的回调函数
alert(data.name);
},
"json"
);
}
function fn3(){
$.ajax({
url:"/WEB22/ajaxServlet2",
async:"true",
type:"POST",
data:{"name":"lucy","age":18},
success:function(data){
alert("请求成功"+data.name);
},
error:function(data){
alert("请求失败");
},
dataType:"json", });
}
</script>
</head>
<body>
<input type="button" value="get访问服务器" onclick="fn1()">
<span id="span1"></span>
<br>
<input type="button" value="post访问服务器" onclick="fn2()">
<span id="span2"></span>
<br>
<input type="button" value="ajax访问服务器" onclick="fn3()">
<span id="span3"></span>
<br>
</body>
</html>

AjaxServlet.java

package com.zhr.ajax;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AjaxServlet2 extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String name= request.getParameter("name");
String age = request.getParameter("age");
System.out.println(name+" "+age); //java 代码只能返回一个 json格式的字符串
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("{\"name\":\"汤姆\",\"age\":21}");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

JS原生Ajax&Jquery的Ajax技术&Json的更多相关文章

  1. js进阶 14 jquery的ajax有哪些函数和事件(多练)

    js进阶 14 jquery的ajax有哪些函数和事件(多练) 一.总结 一句话总结:常用:load.ajax.post.get.getScript().getJSON().表单序列化,ajax事件这 ...

  2. js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化

    js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化 一.总结 一句话总结:如果用ajax传递表单的数据,如果不进行表单的序列化,要一个参数一个参数的写,太麻烦,序列化的话,一句代 ...

  3. js进阶 14-1 jquery的ajax系列中的load方法的作用是什么

    js进阶 14-1 jquery的ajax系列中的load方法的作用是什么 一.总结 一句话总结:jQuery load()方法作用是从服务器加载数据,是一个简单但强大的AJAX方法. 1.load函 ...

  4. 图片轮播(左右切换)--JS原生和jQuery实现

    图片轮播(左右切换)--js原生和jquery实现 左右切换的做法基本步骤跟 上一篇文章  淡入淡出 类似,只不过修改了一些特定的部分 (1)首先是页面的结构部分 对于我这种左右切换式 1.首先是个外 ...

  5. 图片轮播(淡入淡出)--JS原生和jQuery实现

    图片轮播(淡入淡出)--js原生和jquery实现 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成j ...

  6. 原生和jQuery的ajax用法

    jQuery的ajax方法: $.ajax({ url:'/comm/test1.php', type:'POST', //GET async:true, //或false,是否异步 data:{ n ...

  7. Ajax 原生和jQuery的ajax用法

    https://www.cnblogs.com/jach/p/5709175.html form数据的序列化: $('#submit').click(function(){ $('#form').se ...

  8. 原生和jquery 的 ajax

    form数据的序列化: $('#submit').click(function(){ $('#form').serialize(); //会根据input里面的name,把数据序列化成字符串:eg:n ...

  9. tab选项卡切换(js原生、jQuery )

    思路: ① 遍历Tab选项 ② 然后给每个Tab选项绑定点击事件 ③ 每次点击时清除所有Tab选项及Tab选项内容的样式,然后给当前Tab选项添加标记样式,给当前Tab选项添加显示样式 <!DO ...

随机推荐

  1. Python调用外部程序——os.system()和subprocess.call

    通过os.system函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序 系统自带的程序的路径一般都已加入环境变量之中,只需在cmd窗口中直接输入程序名称即可. ...

  2. 【转】查询SQLSERVER执行过的SQL记录

    --创建时间 QS.creation_time, --查询语句 ), (( THEN DATALENGTH(st.text) ) ) AS statement_text, --执行文本 ST.text ...

  3. 使用 cURL 度量 Web 站点的响应时间

    curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.canada.com 0. ...

  4. HTML5与css3权威指南(一)

    doctype声明: <!DOCTYPE html> 字符编码: <meta charset="utf-8"> 不允许写结束标记:area,base,br. ...

  5. 【转】python入门指引

    http://matrix.42qu.com/10757179 前言 其实我也不知道python怎么入门,由我来写这个真的不是很合适.我学python是直接找了dive into python来看.然 ...

  6. 监控 Linux 性能的 18 个命令行工具[转]

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...

  7. java 数组与集合(list)相互转化

    上代码 package com.core.array2collection; import java.util.ArrayList; import java.util.Arrays; import j ...

  8. 关于word图片显示不全

    问题:在编辑word时,在其中一行插入一张图片,但是显示不全. 原因:给文字行距设置成 [ 固定值 ]的原因. 解决方案:先删除图片,在插入图片的一行右键--> 段落,弹出对话框,找到设置行距的 ...

  9. DDMS和程序打包过程

    1. Android版本对应api级别 2.3~~~~~10 3.0~~~~~11 4.0~~~~~14 4.1.2~~~16 2.3和4.1.2是最稳定的 2.Android手机常见分辨率 320* ...

  10. Spring MVC的DispatcherServlet

    Spring MVC提供了一个名为org.springframework.web.servlet.DispatcherServlet的Selvet充当前端控制器,所有的请求驱动都围绕这个Dispatc ...