首页 > 其他分享 >A JAX

A JAX

时间:2023-11-05 11:36:16浏览次数:18  
标签:obj 请求 JAX ajax 服务器 var new

A JAX

概念

一般情况下,前端和后台进行交互都需要页面跳转才能获取到新的数据,然后重新跳转到一个页面,将数据加载到页 面上。这对资源的消耗很大,用户体验感也不是很好。

所以js提供了一个不需要刷新页面就能加载后台数据的技术:AJAX

AJAX可以不刷新页面发送http请求,接收到服务器给客户端的数据。

AJAX,全称: async javascript and XML,是一个异步执行的和后台交互的技术。

例:

网易邮箱注册

网易注册

A JAX_服务器

A JAX_数据_02

A JAX_ajax_03A JAX_数据_04当我们输入用户名,再输入下一项的时候,会有提示说输入的用户名是否可用,但是页面是没有刷新的。

A JAX_ajax_05

A JAX_ajax_06A JAX_服务器_07

A JAX_服务器_08

A JAX_服务器_09


京东的评论页面


京东分页

A JAX_ajax_10

A JAX_服务器_11

A JAX_服务器_12A JAX_数据_13点击下一页的时候,评论列表的内容会改变,但是页面是没有刷新的。

A JAX_服务器_14

A JAX_数据_15A JAX_ajax_16

A JAX_ajax_17

A JAX_数据_18


还有百度的搜索。。。

这都是ajax做的。

ajax最大的特点:不刷新页面发送http请求

感知A JAX

三级联动并获取天气信息。

A JAX的优势

不需要插件支持(一般浏览器且默认开启 JavaScript即可)A JAX_ajax_19

用户体验极佳(不刷新页面即可获取可更新的数据)A JAX_服务器_20

提升 Web程序的性能(在传递数据方面做到按需放松,不必整体提交)A JAX_数据_21

减轻服务器和带宽的负担(将服务器的一些操作转移到客户端)A JAX_ajax_22

缺点:搜索引擎的支持度不够(因为搜索引擎爬虫 暂时还不能理解 JS引起变化数据的内容)A JAX_ajax_23

A JAX的书写

  1. 创建ajax对象,相当于要打电话了,先要安装一部电话var AJAX=new XMLHttpRequest(); //这种写法在ie下是不能兼容的
  2. A JAX_数据_24

    A JAX_服务器_25

    A JAX_数据_26

    A JAX_数据_27


  3. var AJAX = new ActiveXObject("Microsoft.XMLHTTP"); //兼容ie678 var AJAX = new ActiveXObject("Msxml2.XMLHTTP"); //更低版本ie
    兼容所有浏览器的兼容写法
  4. 建立一个http请求,相当于打电话的时候开始拨号AJAX.open(请求方式,请求地址,true);
  5. A JAX_ajax_28

    A JAX_数据_29

    A JAX_数据_30

    A JAX_数据_31


  6. 参数1:请求方式:get/post
    参数2:请求地址
    参数3:true是异步请求,false是同步请求
  7. 监听ajax请求状态的改变,绑定事件的处理程序,等待对方接起电话AJAX.onreadystatechange = function(){
  8. A JAX_ajax_32

    A JAX_服务器_33

    A JAX_ajax_34

    A JAX_数据_35


  9. if (AJAX.readyState == 4 && AJAX.status == 200) {
    AJAX.responseText; //从服务器返回的文本信息
    }
    };
    说明:
    onreadystatechange是状态改变事件,只要ajax状态发生改变就会触发这个事件A JAX_数据_36
    readyState是ajax对象请求的状态:A JAX_服务器_37
    0:未初始化,对象已经建立,但是还未初始化,就是还未调用send方法
    1:已经初始化,但是还没有调用send方法
    2:发送数据,send方法已经调用,但是http头未知
    3:数据接收中,已经接收部分数据,因为响应以及http头不全,这是通过responseText获取少部分数据 会出现错误
    4:请求完成,数据接收完毕,此时可以通过responseText获取完整的相应数据
    responseText是接收服务器响应的字符串数据,如果是xml数据使用responseXML来接收,如果是json数 据,其实也是使用字符串形式相应回来的,使用responseText接收以后,使用JSON.parse(str)或str.parseJSON()转为json对象处理A JAX_服务器_38
    AJAX状态码说明
  10. A JAX_ajax_39

    A JAX_ajax_40

    A JAX_服务器_41

    A JAX_服务器_42


  11. 1##:请求收到,继续处理
    2##:操作成功收到,分析、接受
    3##:完成此请求必须进一步处理
  12. 发送请求,拨出号码


function createAJAX(){

A JAX_ajax_43

A JAX_数据_44

A JAX_数据_45

A JAX_数据_46


var AJAX = null;

if(window.XMLHttpRequest){

AJAX=new XMLHttpRequest();

}else if(window.ActiveXObject){

AJAX = new ActiveXObject("Microsoft.XMLHTTP");

}else{

alert("请升级浏览器");

}

return AJAX;

}


4##:请求包含一个错误语法或不能完成

A JAX_服务器_47

A JAX_ajax_48

A JAX_数据_49

A JAX_服务器_50


5##:服务器执行一个完全有效请求失败

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP协议版本

200——交易成功

201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET请求

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

400——错误请求,如语法错误

401——请求授权失败

402——保留有效ChargeTo头响应

403——请求不允许

404——没有发现文件、查询或URl

405——用户在Request-Line字段定义的方法不允许

406——根据用户发送的Accept拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的饿时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求

500——服务器产生内部错误

501——服务器不支持请求的函数

502——服务器暂时不可用,有时是为了防止发生系统过载

503——服务器过载或暂停维修

504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长

505——服务器不支持或拒绝支请求头中指定的HTTP版本

ajax.send(null);

A JAX_数据_51

A JAX_ajax_52

A JAX_ajax_53

A JAX_服务器_54


如果是post请求的话,需要在发送请求前,设置post请求头,模拟表单来传递数据给服务端(否则获取不到send中 的参数)

ajax.setRequestHeader('content-type', 'application/x-www-form-urlencoded')

A JAX_数据_55

A JAX_ajax_56

A JAX_数据_57

A JAX_数据_58


send发送请求的时候要携带请求参数(键1=值1&键2=值2)

ajax.send('name=Jack&age=18&gender=男')

A JAX_数据_59

A JAX_ajax_60

A JAX_ajax_61

A JAX_ajax_62


请求示例

get请求

html代码:

<body>

A JAX_ajax_63

A JAX_数据_64


<div class="box"></div>

<button id="btn">获取当前时间</button>

</body>

<script type="text/javascript">

function createAjax(){

var Ajax = null;

if(window.XMLHttpRequest){

Ajax = new XMLHttpRequest();

}else if(window.ActiveXobject){

Ajax = new ActiveXObject("Microsoft.XMLHTTP");

}else{

alert("请升级浏览器");

return false;

}

return Ajax;

}

document.querySelector("#btn").notallow=function(){

var ajax = createAjax();

ajax.open("get","ajax.php",true);

ajax.onreadystatechange = function(){

if(ajax.status == 200 && ajax.readyState == 4){

document.querySelector(".box").innerText = ajax.responseText;

}

}

ajax.send(null);

}

</script>

php代码:

date_default_timezone_set("PRC");

A JAX_服务器_65

A JAX_ajax_66


echo date("Y-m-d H:i:s",time());

post请求

html代码:

<body>

A JAX_数据_67

A JAX_ajax_68


<style>

ul{


list-style:none;

A JAX_服务器_69

A JAX_ajax_70


padding: 0;

margin: 0;

}

</style>

<h1>获取省下的市</h1>

省份名称:<input type="text" name="province">

<button id="btn">获取</button>

<ul></ul>

</body>

<script type="text/javascript">

function createAjax(){

var Ajax = null;

if(window.XMLHttpRequest){

Ajax = new XMLHttpRequest();

}else if(window.ActiveXobject){

Ajax = new ActiveXobject("Microsoft.XMLHTTP");

}else{

alert("请升级浏览器");

return false;

}

return Ajax;

}

document.querySelector("#btn").notallow=function(){

var ajax = createAjax();

ajax.open("post","postAjax.php",true); ajax.notallow=function(){

if(ajax.status == 200 && ajax.readyState == 4){

var ul = document.querySelector("ul");

var arrText = ajax.responseText;

// console.log(typeof arrText); // string

var arr = JSON.parse(arrText);

ul.innerHTML = '';

for(var i=0;i<arr.length;i++){

var li = document.createElement("li"); li.innerText = arr[i]; ul.appendChild(li);

}

}

}

ajax.setRequestHeader("content-type","application/x-www-form-urlencoded"); var pname = document.querySelector("[name='province']").value.trim();

ajax.send("province="+pname);

}

</script>

php代码:

$arr = [

A JAX_ajax_71

A JAX_ajax_72


"山东"=>[

"济南",

"威海",


"郓城",

A JAX_数据_73

A JAX_数据_74


"大明湖畔"

],

"河北"=>[

"石家庄",

"衡水",

"保定",

"张家口"

]

];

$pname = $_POST["province"];

foreach($arr as $k=>$v){

if($k==$pname){

echo json_encode($v);

}

}

接收的数据

接收不同数据类型(text、xml、json)

接收文本A JAX_数据_75

var response = ajax.responseText;

A JAX_ajax_76

A JAX_ajax_77


接收xmlA JAX_ajax_78

var xml = ajax.responseXML;

A JAX_ajax_79

A JAX_服务器_80


接收jsonA JAX_数据_81

var json = ajax.responseText;

A JAX_ajax_82

A JAX_服务器_83


var obj = JSON.parse(json);

封装通用的ajax

function Ajax(obj){

A JAX_数据_84

A JAX_服务器_85


var ajax = null;

if(window.XMLHttpRequest){

ajax = new XMLHttpRequest();

}else if(window.ActiveXobject){

ajax = new ActiveXobject("Microsoft.XMLHTTP");

}else{

alert("请升级浏览器");

return false;

}


obj.method = obj.method || "get"; //默认发送get请求

A JAX_服务器_86

A JAX_ajax_87


if(!obj.url){

throw new Error("请求地址不能为空");

}

if(Object.prototype.toString.call(obj.method) != "[object String]"){

throw new Error("请求地址必须是字符串");

}else if(obj.method != "get" && obj.method != "post"){

throw new Error("请求地址必须是get或者是post");

}

if(Object.prototype.toString.call(obj.url) != "[object String]"){

throw new Error("请求地址必须是字符串");

}

if(obj.async == "undefined"){

obj.async = true;

}

if(Object.prototype.toString.call(obj.async) != "[object Boolean]"){

throw new Error("是否异步的参数必须是布尔值");

}

if(obj.data != "undefined"){

if(Object.prototype.toString.call(obj.data) == "[object String]"){

if(obj.data.indexOf("&")>=0){

if(obj.method == "get"){

obj.url += "?"+obj.data;

}else if(obj.method == "post"){

var str = obj.data;

}

}else{

throw new Error("携带的参数格式不对,字符串必须是带'='符号的键值对");

}

}else if(Object.prototype.toString.call(obj.data) == "[object Object]"){

var str = '';

for(var attr in obj.data){

str += attr + "=" + obj.data[attr];

}

}else{

throw new Error("携带的参数格式不对,需要字符串或者对象");

}

}

if(obj.success == "undefined"){

obj.success = function(res){}

}

if(obj.error == "undefined"){

obj.error = function(){}

}

if(Object.prototype.toString.call(obj.success) != "[object Function]" || Object.prototype.toString.call(obj.error) != "[object Function]"){

throw new Error("回调函数必须是函数");

}

ajax.open(obj.method,obj.url,obj.async) ajax.notallow=function(){

if(ajax.readyState == 4){

if(ajax.status>=200 && ajax.status<300){

var res;


switch(obj.dataType){

A JAX_服务器_88

A JAX_ajax_89


case undefined:

case "json":

res = JSON.parse(ajax.responseText); break;

case "string":

res = ajax.responseText; break;

case "xml":

res = ajax.responseXML; break;

default:

throw new Error("期望的数据格式参数传入错误!");

}

obj.success(res);

}else{

obj.error();

}

}

}

if(obj.method=='post'){

ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

if(obj.data != undefined){

ajax.send(str); return;

}

}

ajax.send();

}

调用:

var pname = document.querySelector("[name='province']").value.trim();

A JAX_服务器_90

A JAX_数据_91


var response = Ajax({

data:{province:pname},

url:"postAjax.php",

method:"post",

asyn:true,

success:function(res){

var arr = JSON.parse(res);

var ul = document.querySelector("ul");

ul.innerHTML = '';

for(var i=0;i<arr.length;i++){

var li = document.createElement("li"); li.innerText = arr[i]; ul.appendChild(li);

}

}

});

postman测试


postman使用

A JAX_服务器_92

A JAX_ajax_93

A JAX_ajax_94A JAX_ajax_95get和post的区别:

A JAX_ajax_96

A JAX_数据_97A JAX_服务器_98

A JAX_服务器_99

A JAX_服务器_100


  1. get请求的数据展示在地址栏,post在http请求的请求主体中
  2. get请求的数据长度有限制,post没有限制,除非在服务器设置限制
  3. get请求的数据格式有限制,必须是url编码的,post的数据没有限制
  4. get请求不如post安全
  5. get请求容易有缓存,post没有缓存

标签:obj,请求,JAX,ajax,服务器,var,new
From: https://blog.51cto.com/u_16259380/8191300

相关文章

  • Ajax发送数据
    ajax发送json格式数据(contentType)"""前后端传输数据的时候一定要确保编码格式跟数据真正的格式是一致的不要骗人家!!!{"username":"jason","age":25} 在request.POST里面肯定找不到 django针对json格式的数据不会做任何的处理 request对象方法补充 request.is_a......
  • AJAX-事件循环(超详细过程)
    一.概念JS有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。定义:执行代码和收集异步任务的模型,在调用栈空闲,反复调用任务队列里回调函数的执行机制,就叫时间循环。原因:JS是単线程,为了让耗时的代码不阻塞其他代码运行,设计了事件循环模型二......
  • Ajax + java Servlet 制作Web进度条
     运行效果图  index2.jsp <%@pagelanguage="java"pageEncoding="UTF-8"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><scripttype="text/javascript"langua......
  • php: ajax请求,在返回信息前面出现ufeff红点,导致解析错误
    问题:ajax请求,在返回信息前面出现ufeff红点,导致解析错误原因:PHP文件格式编码位utf-8bom  文件编码是含BOM的会导致出现这种情况解决:  第一种方法:PHP文件格式编码转化为utf-8  第二种方法:在接口echo输出前面,添加一个ob_clean()函数           ......
  • 10、SpringMVC之处理Ajax请求
    创建名为spring_mvc_ajax的新module,过程参考9.1节和9.5节10.1、SpringMVC处理Ajax请求10.1.1、页面请求示例<inputtype="button"value="测试SpringMVC处理Ajax请求"onclick="testAjax()"><scripttype="text/javascript">functiontestA......
  • AJAX-解决回调函数地狱问题
    一、同步代码和异步代码1.同步代码浏览器是按照我们书写代码的顺序一行一行地执行程序的。浏览器会等待代码的解析和工作,在上一行完成之后才会执行下一行。这也使得它成为一个同步程序。总结来说:逐行执行,需原地等待结果后,才继续向下执行2.异步代码异步编程技术使你的程序可以在一个......
  • AJAX的引入之传统请求带来的问题------计算机网络经典
    AJAX在浏览器当中发送异步请求,请求之间是独立的,谁也不用等谁类似于多线程并发,不会出现页面清空然后展示新的页面的效果实现局部刷新(靠多种技术一起做到的,而不是一个技术叫ajax)它是异步的(类似于多线程)准备一个前端页面用来发送传统的请求方式<!DOCTYPEhtml><htmllang=......
  • 手搭手Ajax经典基础案例省市联动
    环境介绍技术栈springboot+mybatis-plus+mysql软件版本mysql8IDEAIntelliJIDEA2022.2.1JDK1.8SpringBoot2.7.13mybatis-plus3.5.3.2pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns......
  • AJAX学习(四)-(axios核心的原理)
    一、Promise1.定义Promise对象用于表示一个异步操作的最终完成(或失败)及其结果值我们用一张图来清晰的看Promise位于哪里2.好处1.逻辑更清晰2.了解axios函数内部运作机制3.能解决回调函数地狱问题3.使用语法及步骤示例代码如下:<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • form表单和ajax提交的重复
    form表单和ajax提交的重复form表单中input的submit类型和button按钮都会触发两次(有ajax的情况),当我们把input的type改成button类型就不会朝后端再发送POST请求了<formaction=""method="post">用户名:<inputtype="text"name="username"id="id_user">......