Ajax进阶一

xiaoxiao2021-02-28  109

第一:什么是Ajax. AJAX(Asynchronous Javascript And XML)翻译为中文就是异步的JavaScript和xml,他是利用JavaScript语言和服务进行异步的交互,利用xml进行数据的传输。当然他的数据传输布置xml一种。

第二:Ajax的优点和缺点。 AJAX还有一个最大的特点就是,在服务器响应的时候,不可以局部刷新html页面,不用全部刷新,让用户感觉不到页面的刷新。 Ajax的优点:(1)可以使用JavaScript和服务器进行异步刷新。 (2)可以局部刷新html页面 Ajax的缺点:(1)就是和服务器交互太多导致服务器的压力过大。 第三:什么是同步,什么是异步。 同步交互:客户端发出一个请求后,需要在服务器端响应之后,才能发送第二个请求 异步交互:客户端发出一个请求后,无需等待服务器响应,就能立马发送第二个请求。 第四:Ajax发送请求的四步操作。 ajax发送异步请求(四步操作)

第一步(得到XMLHttpRequest)

ajax其实只需要学习一个对象:XMLHttpRequest,如果掌握了它,就掌握了ajax。

得到XMLHttpRequest

大多数浏览器都支持:var xmlHttp = new XMLHttpRequest(); IE6.0:var xmlHttp = new ActiveXObject(“Msxml2.XMLHTTP”); IE5.5以更早版本的IE:var xmlHttp = new ActiveXObject(“Microsoft.XMLHTTP”);

编写创建XMLHttpRequest对象的函数 function createXMLHttpRequest() { try { return new XMLHttpRequest(); } catch(e) { try { return new ActiveXObject(“Msxml2.XMLHTTP”); } catch(e) { try { return new ActiveXObject(“Microsoft.XMLHTTP”); } catch(e) { alert(“浏览器不兼容”); throw e; } } } }

第二步(打开与服务器的连接)

xmlHttp.open():用来打开与服务器的连接,它需要三个参数:

请求方式:可以是GET或POST 请求的URL:指定服务器端资源,例如;/day23_1/AServlet,如果这里为get请求,url后边还可以添加参数。 请求是否为异步:如果为true表示发送异步请求,否则同步请求!

xmlHttp.open(“GET”, “/day23_1/AServlet”, true),如果是post请求,则需要把GET改为POST。注意:当我们的请求是post请求的时候我们还要设置请求头xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 因为POST请求必须设置ContentType请求头的值为application/x-www.form-encoded。表单的enctype默认值就是为application/x-www.form-encoded!因为默认值就是这个,所以大家可能会忽略这个值!当设置了<form>的enctype=” application/x-www.form-encoded”时,等同与设置了Cotnent-Type请求头。 但在使用AJAX发送请求时,就没有默认值了,这需要我们自己来设置请求头:

第三步(发送请求)

xmlHttp.send(null):如果不给可能会造成部份浏览器无法发送!

参数:就是请求体内容!如果是GET请求,必须给出null(因为get的请求参数在url后边添加)。如果不为null则可能在火狐浏览器的情况下导致请求不能正常发送。如果为post请求那么参数在这里应该给出。

第四步(注册监听器)

在xmlHttp对象的一个事件上注册监听器:onreadystatechangexmlHttp对象一共有5个状态:

0状态:刚创建,还没有调用open()方法; 1状态:请求开始:调用了open()方法,但还没有调用send()方法 2状态:调用完了send()方法了; 3状态:服务器已经开始响应,但不表示响应结束了! 4状态:服务器响应结束!(通常我们只关心这个状态!!!)

得到xmlHttp对象的状态: var state = xmlHttp.readyState;//可能是0、1、2、3、4得到服务器响应的状态码 var status = xmlHttp.status;//例如为200、404、500得到服务器响应的内容1 var content = xmlHttp.responseText;//得到服务器的响应的文本格式的内容 var content = xmlHttp.responseXML;//得到服务器的响应的xml响应的内容,它是Document对象了! xmlHttp.onreadystatechange = function() {//xmlHttp的5种状态都会调用本方法 if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {//双重判断:判断是否为4状态,而且还要判断是否为200 // 获取服务器的响应内容 var text = xmlHttp.responseText; } }; 示例代码如下:(使用该示例代码通过点击页面上的button,向服务器发送异步请求,返回一个responseText到我们的页面) <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <script type="text/javascript"> //获取xmlhttpequest对象 function createXmlHttpRequest(){ try { return new XMLHttpRequest(); } catch (e) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return alert("你的浏览器类型不支持"); throw e; } } } } //html在加载完成之后就调用方法 window.onload=function (){(这个的方法说实话不太明白,希望各位大神在评论区里指导一下) //获取btn var btn=document.getElementById("btn"); //给btn的点击事件注册一个监听器 btn.onclick=function (){ //ajax的四步操作,得到服务器的相应 //1.获取xmlhttprequest的对象 var xmlhttp=createXmlHttpRequest(); //2.打开与服务器的连接,需要是哪个参数 xmlhttp.open("GET","/AjaxWeb/Aservlet",true); //3.建立链接 xmlhttp.send(null); //4.在xmlhttp上边注册监听事件 xmlhttp.onreadystatechange=function (){ if(xmlhttp.readyState==4 && xmlhttp.status==200){ var text=xmlhttp.responseText; var h1=document.getElementById("h1"); h1.innerHTML=text; } } } } </script> <body> <button id="btn">点击提交</button> <h1 id="h1"></h1> </body> </html>
转载请注明原文地址: https://www.6miu.com/read-42491.html

最新回复(0)