AJAX-----基础

AJAX

Ajax工作原理

同步和异步

同步提交:当用户发送请求时,当前页面不可以使用,服务器响应页面到客户端,响应完成,用户才可以使用页面。

异步提交:当用户发送请求时,当前页面还可以继续使用,当异步请求的数据响应给页面,页面把数据显示出来 。

需要知道的一些知识

URL

URL地址由三部分组成

 传输协议
 域名
 端⼝号
传输协议
  • 我们常⻅的传输协议是 http 和 https
  • 只不过 http 是⼀种常⻅协议,不是很安全
  • https 是⼀种加密传输协议
域名

域名就代表着 ⽹络那⼀头 那个电脑的 IP 地址

其实也就是我们要访问哪⼀个服务器

端⼝号
  • 光找到服务器电脑还不⾏,还得找对⽂件夹才可以
  • ⼤家都把⽂件夹编上号存储了0 ~ 255,一共256 个
  • 每个⽂件夹⾥⾯还有对应的⼩⽂件夹0 ~ 255,一共256 个
  • 那么一共就有256 * 256 个⽂件夹,也就是从0~ 65535
  • 所以我们的端⼝号就有 65536 个,分别对应着0 ~ 65535
  • ⼤家都把80端⼝号作为⼀个⽹站的默认端⼝号
  • http协议默认是80端⼝号
  • https协议默认是443端⼝号

XML

是一门可扩展标记语言,被设计用来传输和存储数据,都是自定义标签

HTTP

响应报文,请求报文

创建 XMLHttpRequest 对象

variable = new XMLHttpRequest();
vairable = new ActiveXObject("Microsoft.XMLHTTP");//老版本(IE5和IE6)

向服务器发送请求

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
//XMLHttpRequest对象的open()和send()方法
open(method,url,async)
  • method : 请求的类型;GET 或 POST
  • url: 文件在服务器上的位置
  • async: true(异步) 或 false (同步)
send(string)
  • string : 仅用于 POST 请求
GET POST ?

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

  • 不愿使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
GET
xmlhttp.open("GET","/try/ajax/demo_get.php",true);  //一个简单的GET请求
xmlhttp.open("GET","/try/ajax/demo_get.php?=" + Math.random(),true) //向 URL 添加一个唯一的ID
xmlhttp.open("GET","/try/ajax/demo_get.php?fname=Henry&lname=Ford",true)   //通过GET 方法添加信息
//===================jQuery中的get post=================================通过 HTTP 请求加载远程数据
$.get('url',{a:100, b:300}, function() {
    //函数体
    //get 请求的参数就直接在 url 后面进行拼接就可以
})
$.post('url',{a:100, b:300}, function() {
    //函数体
    //post 请求的参数是携带在请求体中的,所以不需要再 url 后面拼接
})
//======================================
$.ajax({
    //URL
    url:  ,
    //参数
    data: {a:2, b:30},
    //请求类型
    type:,
    //响应体结果
    dataType: 'json',
    //成功的回调
    success: function(data) {
    
	},
	//超时时间
	timeout: 3000,
     //失败的回调
    error: function() {
            
    }
})
POST
xmlhttp.open("POST","/try/ajax/demo_post.php",true); //一个简单的POST请求
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded")   //("名字","值")
xmlhttp.send("fname=Henry&lname=Ford");
setRequestHeader

通常在HTTP协议里,客户端像服务器取得某个网页的时候,必须发送一个HTTP协议的头文件,告诉服务器客户端要下载什么信息以及相关的参数.

而 XMLHTTP 就是通过HTTP协议取得网站上的文件数据的,所以也要发送HTTP头给服务器。
但是 XMLHTTP 默认的情况下有些参数可能没有说明在HTTP头里,这是当我们需要修改或添加这些参数时就用到了setRequestHeader 方法.

setRequestHeader方法只是XMLHTTP为添加或修改HTTP头提供的一个接口方法而已,CONTENT-TYPE:application/x-www-form-urlencoded含义是表示客户端提交给服务器文本内容的编码方式是URL编码,即除了标准字符外,每字节以双字节16进制前加个“%”表示.

GET 方式是没有提交内容的,GET 传参数的方式就是通过虚拟地址传送如:GET /bb.asp?www=1234 HTTP/1.1
参数全部就只有 "www=1234" 这么多;

POST是将参数放到HTTP后面的

setRequestHeader(header,value) : header 规定头的名称; value : 规定头的值

all

服务器响应

responseText

如果来自服务器的响应并非XML, 请使用 responseText 属性

responseText 属性返回字符串形式的响应

responseXML

如果来自服务器的响应是XML, 而且需要作为 XML 对象进行解析,请使用 responseXML 属性

responseType = ‘json’;自动转换

onreadystatechange 事件

在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

XMLHttpRequest 对象的三个重要属性
onreadystatechange储存函数(或函数名), 每当readyState 属性改变时, 就会调用该函数
readyState存有 XMLHttpRequest 的状态.从0到4发生变化.
status200:“OK” 404: 未找到页面

每当 readyState 改变时, 就会触发 onreadystatechange 事件(0-1,1-2,2-3,3-4)

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接受
  • 3: 请求处理中
  • 4: 请求也完成, 且响应已就绪

当 readyState 等于4 且状态为 200 时, 表示响应已就绪:

xmlhttp.onreadystatechange=function() {
    if(xmlhttp.readyState==4 && xmlhttp.status==200) {
        //
    }
}

回调函数是一种以参数形式传递给另一个函数的函数。

如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。

该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同)

ASP/PHP

解决缓存问题

open("GET","url?t="+Date.now())

请求超时 网络异常处理

//延时响应

setTimeout(() => {

​	//设置响应体  设置允许跨域

	response.send('');

},3000)
    // 1. 创建对象
            const xhr = new XMLHttpRequest();
            //超时设置   2s设置
            xhr.timeout = 2000;
            //超时回调
            xhr.ontimeout = function() {

            }
            //网络异常
            xhr.onerror = function() {
                
            }

abort() 取消请求

请求重复发送问题

// 假设有一个按钮控制着发送请求
const btn = document.querySelector('button');
let x = null;
let isSending = false;  // 是否正在发送请求
btn.onclick = function() {
    if(isSending) {
        x.abort(); //如果正在发送,则取消该请求,创建一个 新请求
        x = new XMLHttpRequest();
        //修改 isSending 的值
        isSending = true;
        x.open("GET","URL");
        x.send();
        ...
    }
}

Axios函数

axios.defaults.baseURL = "";
axios.get("",{
	params: {
	
	},
	headers: {
	
	},
	...
})
//===========没搞明白
axios.post("",{
	...
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿选不出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值