ajax学习

ajax学习

  • 是什么?

“Asynchronous Javascript And XML”(异步JavaScript和XML),
并不是新的技术,只是把原有的技术,整合到一起而已。

1.使用CSS和XHTML来表示。
2.使用DOM模型来交互和动态显示。
3.使用XMLHttpRequest来和服务器进行异步通信。
4.使用javascript来绑定和调用。
  • 有什么用?

咱们的网页如果想要刷新局部内容。 那么需要重新载入整个网页。用户体验不是很好。 就是为了解决局部刷新的问题。 保持其他部分不动,只刷新某些地方。

  • 适应场景
    当我们向输入框输入字符时,ajax把输入的字符发送给了百度服务器百度服务器返回搜索候选项目
    在这里插入图片描述
    注册账号验重
    当我们输入用户名时,页面通过ajax把用户名发送给服务器,服务器返回用户名是否重复

原生Ajax

数据请求get或post

创建ajax请求对象
//创建异步请求对象
	function ajaxFunction(){
		var xmlHttp;
		try{// Firefox, Chrome, Opera 8.0+, Safari
			xmlHttp = new XMLHttpRequest();
		}catch(e){
			try{// Internet Explorer(高版本)
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}catch(e){
				try{// Internet Explorer(低版本)
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				}catch(e){
					
				}
			}
		}
		return xmlHttp;
	}
发送请求

get请求

//执行get请求
function get() {

    //1. 创建xmlhttprequest 对象
    var request = ajaxFunction();

    //2. 发送请求。
    /*	
	 *	参数一: 请求类型  GET or  POST
	 *	参数二: 请求的路径
	 *	参数三: 是否异步, true  or false
	 */
    request.open("GET" ,"TestServlet" ,true );
    request.send();
}

如果发送请求的同时,还想获取数据,那么代码如下

//执行get请求
function get() {

    //1. 创建xmlhttprequest 对象
    var request = ajaxFunction();

    //2. 设置请求参数(区别于post请求,get请求的参数是直接拼到地址中)
    request.open("GET" ,"TestServlet?name=aa&age=18" ,true );

    //3. 获取响应数据 注册监听的意思。  一会准备的状态发生了改变,那么就执行 = 号右边的方法
    request.onreadystatechange = function(){
        // readyState的值一共有5个状态,参见下表
        // readyState == 4 表示请求已经完成, 再判断状态码是否是200,200表示服务端正常响应(没有报错)
        if(request.readyState == 4 && request.status == 200){
            //弹出响应的信息
            alert(request.responseText);
        }
    }
    
    // 4. 发送请求
    request.send();
}

XMLHttpRequest readyState状态表

状态描述
0UNSENT代理被创建,但尚未调用 open() 方法。
1OPENEDopen() 方法已经被调用。
2HEADERS_RECEIVEDsend() 方法已经被调用,并且头部和状态已经可获得。
3LOADING请求中; responseText 属性已经包含部分数据。
4DONE请求完成。

数据请求 Post

<script type="text/javascript">
	//1. 创建对象
	// 和get请求一样
	
	function post() {
		//1. 创建请求对象
		var request = ajaxFunction();
		
		// 2. 设置请求地址、参数、类型(post、get)
		request.open("post", "StudentServlet", true);
		
		//3. 获取响应数据 注册监听的意思。  一会准备的状态发生了改变,那么就执行 = 号右边的方法
	    request.onreadystatechange = function(){
	        //前半段表示 已经能够正常处理。  再判断状态码是否是200
	        if(request.readyState == 4 && request.status == 200){
	            //弹出响应的信息
	            console.log("请求完成");
	            var h1 = document.getElementById("h1");
	        	h1.innerHTML = request.responseText;
	        }
	    }
		
	 	// 4. 如果使用的是post方式带数据,那么 这里要添加头, 说明提交的数据类型是一个经过url编码的form表单数据
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		
		// 5. 发送请求
    	// 如果是GET请求,参数写在这里是无效的
		request.send("id=555");
	}

</script>

JQuery Ajax

底层ajax写法

// 语法:$.ajax(url, [settings]);

$.ajax("TestServlet", {
    type: "GET",
    data: {
        action: "json",
        uname: "zhangsan"
    },
    dataType: "json",
    success: function(data, status_text){
        console.log(data);
        console.log("status_text: " + status_text);
    },
    error: function(xhr, textStatus, errorThrow) {
        console.log("请求失败");
    }
});

. a j a x 方 法 是 其 他 所 有 a j a x 相 关 方 法 的 底 层 实 现 , 其 他 方 法 都 是 在 它 的 基 础 上 给 我 们 封 装 的 更 方 便 使 用 的 方 法 。 关 于 .ajax方法是其他所有ajax相关方法的底层实现,其他方法都是在它的基础上给我们封装的更方便使用的方法。 关于 .ajaxajax便使.ajax的详细介绍参见 http://jquery.cuishifeng.cn/jQuery.Ajax.html

get请求

/*
 * 参数:
 *  url: 请求地址
 *  data: 待发送 Key/value 参数
 *  fn: 请求成功后回调函数
 *  type: 返回内容格式,xml, html, script, json, text, _default
 */

$.get( "url",{pid:pid} ,function(data,status_text){
    console.log(data);
    console.log("status_text: " + status_text);
},"json" );	// 指定请求返回的格式是json,jquery会帮我们把服务端返回的json字符串转换成js的json对象

post请求

/*
 * 参数:
 *  url: 请求地址
 *  data: 待发送 Key/value 参数
 *  fn: 请求成功后回调函数
 *  type: 返回内容格式,xml, html, script, json, text, _default
 */

$.post( "url",{pid:pid} ,function(data,status){
    console.log(data);
    console.log("status_text: " + status_text);
},"json" );	// 指定请求返回的格式是json,jquery会帮我们把服务端返回的json字符串转换成js的json对象

获取JSON数据专用方法

$.getJSON("url", {id:1, name: "zhangsan"} function(json){
  console.log(json);
});

服务器和客户端数据传输的方式

xml

因为无效数据占比太大,阅读困难。基本已经被json格式淘汰掉了

  	<list>
        <city>
        <id>1<id>
        <pid>1</pid>
        <cname>深圳</cname>
        </city>
        <city >
        <id>2<id>
        <pid>1</pid>
        <cname>东莞</cname>
        </city>
    </list>

json

阅读性更好 、 占用空间更小。

[{city:{id:1, pid:1, cname:"深圳"}}, {city:{id:2, pid:1, cname:"东莞"}}]
fastjson库
	JSON.toJSONString();	// 将JavaBean encode成 json string
	JSON.parseObject();		// 将json对象decode成javabean
	JSON.parseArray();		// 将json数组decode成java List或 JSONArray类型

json的好处

在项目中导入jar包

fastjson-1.2.58.jar

创建一个实体类比如下面
/**
 *  通用响应数据对象
 * @author
 *
 */
public class ResponseInfo {
	private Integer code;
	private String msg;

	public ResponseInfo() {
	}

	public ResponseInfo(Integer code) {
		this.code = code;
	}

	public ResponseInfo(Integer code, String msg) {
		this.code = code;
		this.msg = msg;
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}
}

创建测试类



import com.alibaba.fastjson.JSON;
import com.lanou.bean.ResponseInfo;

public class TestJson {
	public static void main(String[] args) {
		ResponseInfo info = new ResponseInfo(200,"请求成功");
		System.out.println("info:"+info);
		String jsonStr = JSON.toJSONString(info);
		System.out.println("将对象转成json字符串:" + jsonStr);
		String str = "{\'code\':200,\"msg\":\"请求成功\"}";
		ResponseInfo info2 = JSON.parseObject(str, ResponseInfo.class);
		System.out.println("info2:"+info2);
		System.out.println(info2.getMsg());
	}
}

可以把请求回来的数据存入Java对象,Java对象可以和json数据来回转化,通过json把数据传到前台,这一眼就能看出来数据是什么
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值