14-javascript-ajax的学习

本文详细介绍了AJAX的核心概念、特点和使用方法,包括创建AJAX对象、设置请求参数和处理响应。同时,讨论了同源策略与跨域问题,提到了JSONP、反向代理和CORS作为常见的跨域解决方案。此外,还提及了异步编程中的Promise用于解决回调地狱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AJAX的学习

1、背景

  • async 异步 ( async javascript and xml )
  • 前后端交互的手段

2、ajax的 特点

  • 不需要任何其他东西就可以直接操作
  • 纯面向对象的语法
  • JS内部给我们提供了一个内置构造函数我们可以直接使用
  • 请求可以让页面无刷新更新数据
  • 响应内容不会直接显示到页面

3、使用 AJAX

  • 创建一个 ajax 对象
const xhr = new XMLHttpRequest()
const xhr - new ActiveXObject("Microsoft.XMLHTTP")   //IE9及以下
  • 请求方式和请求地址
get  请求传参是拼接到地址后面  ?key=value&key=value

xhr.open("GET","/index.php?key=value&key=value)
//第三个参数:就是指定是否异步  默认值是  true

//POST请求需要有请求头
xhr.setRequestHeader("content-type","application/x-www-form-urlencode")
xhr.send("key=value&key=value")
  • 发送请求
xhr.send()
setTimeout(()=>{
    console.log(xhr.readyState)
    ,2000)
xhr.onreadystatechange = function(){
    
}

注意:xhr 里面有两个东西 状态码: status readyState

  • readyState === 0 请求建立了,创建了 ajax 对象以后
  • readyState === 1 请求准备完毕,知道了请求方式和请求地址 open() 以后
  • readyState === 2 接收服务端的响应
  • readyState === 3 开始解析数据了
  • readyState === 4 数据解析完成 可以使用了

xhr 里面有两个方法 onreadystatechange onload

xhr.onreadystatechange = function(){
    if(xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)){
        console.log(xhr.responseText)
    }
}
//新增的xhr方法
 //普通浏览器可用,老版浏览器别用  开发时也别用
xhr.onload = function(){
    console.log(xhr.responseText)
}

同源策略

浏览器做的一个限制 只能访问同源(域名 请求协议 端口一模一样)请求

  • 请求协议、域名、端口有一个不一样都不允许你访问

客户端向服务端发送请求

我们把这个安全策略叫做 跨域

浏览器不允许你去访问别人的服务器

解决跨域的方法

  • 1、jsonp

    jsonp的原理 :主要是利用script 标签的src 属性没有跨域的限制

  • 2、nginx反向代理

    服务器访问服务器不受同源策略影响

  • 3、cors跨域

    给php文件里面加入header("Access-Control-Allow-Origin:*");

不受跨域影响的标签

  • link 标签 请求过来的字符串直接当成 css 解析
  • a
  • img 请求过来的字符串直接当成 图片 解析
  • script 请求过来的字符串直接当成 js 解析
  • iframe 请求过来的字符串直接当成 html 解析

异步

代码执行 先执行同步代码,遇到异步代码,先把它扔到队列里面去,等同步代码执行完毕,再去队列里面看看还有没有代码没有执行,如果有再按照顺序执行

promise

  • 解决回调地狱

  • ES6 新增 把异步代码当成同步来书写 并不可以优化代码量

  • promise 有三个状态 pendding 等待中

    ​ resolve 解决 成功

    ​ reject 拒绝 失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值