美文网首页前端知识总结
2019-02-15 Ajax 简要笔记

2019-02-15 Ajax 简要笔记

作者: hello1998 | 来源:发表于2019-03-15 18:55 被阅读42次

    1.Ajax简要介绍

    Ajax 是指一种创建交互式网页应用的网页开发技术,异步JavaScript和XML

    关键点 异步 不需要页面跳转 局部刷新

    核心:基于http协议以异步的方式通过XMLHttpRequest对象,向服务器进行通信

    作用:在页面不刷新的情况下,请求服务器,实现局部的渲染数据

    优点:提高效率

    异步:某段程序的执行不会影响其他程序的执行   代码的执行顺序不依赖书写顺序

    异步对象:1.发送请求 2.把处理结果带回来

    2.发送请求相关知识

    请求报文:

    请求行 请求方式 url 协议

    请求头 客户端发送给服务器的一些额外信息

    请求体 客户端传递给服务器的数据

    响应报文:

    响应行  相应状态码 200表示响应成功

    响应头 服务器返回给客户端的一些其他信息

    响应体 服务器返回给客户端的数据

    以XMLHttpRequest发送请求及将处理结果带回的步骤

    1.创建异步对象

    2.设置请求报文

    请求行:open(请求方式,url)

    get请求,如果有参数,需要在url后面拼接参数

    请求头 setRequestHeaders

    get请求不需要设置请求头

    post请求需要设置请求头 setRequestHeaders('Content-Type’

    请求体 send(键 = 值)

    get请求不需要设置请求体,post请求需要设置请求体

    3.响应

    当异步对象的响应状态发生改变的时候会触发事件 onreadystatechange

    一个成功的响应应该包括两个方面:服务器成功响应  ,数据已经返回到客户端并且可以使用。

    获取返回的数据 xhr.responseXML  获取xml文件,document,类似于dom结构,可以使用dom的方式获取数据

    xhr.responseText 获取的如果是字符串就直接使用,如果是字符串(里面是数组)就要用JSON.parse()转换为数组或者对象,如果最外层是[]那就转换为数组,如果最外层是{}那就转换为对象

    异步对象的响应状态分为五种情况:

    “0” 创建了异步对象,但还没有真正的发送请求

    “1”调用了send方法,正在发送请求

    “2” send方法执行完毕了,已经收到服务器的响应内容,原始内容,还不可以使用

    “3” 正在解析数据

    “4” 响应内容解析完毕,可以使用

    所以在接受返回数据之前要进行判断

    客户端渲染(浏览器渲染)

    1.向服务器请求html静态页面

    2.服务器返回所请求的html页面

    3.浏览器发现里面有相应的js代码,那么就执行

    4.让异步对象再次发送数据请求

    5.服务器会返回相应的数据

    6.在html页面中根据数据动态生成页面结构

    7.渲染显示

    服务器端渲染

    get请求的案例                 

      php文件

                        

    html文件

    post请求的案例

                

    get文件 post

    封装函数

    jquery当中的ajax

    1.jquery当中ajax的详细介绍

    $.ajax({这个里面传入一个字面量对象})

    type:发送请求的类型,通常这个值要参考后端文件进行设置

    url:发送请求的地址

    data:发送给服务器的参数

    timeOut:请求超时 设置的时间单位为毫秒

    dataType: 可以设置服务器返回数据的格式

    beforeSend:发送请求之前的调用,在这个回调中我们可以进行一些请求之前的相关操作,一般用来做表单的相关验证,在这个回调函数中,如有return false ,本次请求终止

    success:响应成功之后的回调函数

    error:错误响应是的回调,e为参数为报错信息

    complete: 响应完成时调用(包括成功和失败)实现一些全局成员的释放,或者页面状态的重置

    serialize()把表单内部所有带name属性的表单元素value进行拼接成字符串

    key=value&key=value;

    $("#表单的id“) .serialize()

    Ajax可以接受两种类型的参数1.对象  2.参数格式的字符串

    get请求

    $.get({url,data,success,dataType)

    post请求

    $.post({url,data,success,dataType)

    注册案例demo

    1.获取验证码

    2.验证用户名

    3.完成最终的提交

    2.模板引擎的引用 art-template

    使用的步骤:1.引入art-template的文件,原生和简洁的文件名是不一样的

                           2.创建模板,标签是script,对类型和id都要进行设置,type一定不能是js

                            3.进行调用 template("模板id“,数据(数据必须是对象,如果不是对象就要伪装成对象)),这个函数有返回值,返回值是一个动态的结构。

    原生语法

    1.逻辑表达式 :<% %>符号包裹起来的是逻辑表达式

    2.输出表达式:<%= %> 等号和百分号之间是不能有空格的 对内容编码的输出

    简易语法

    1.逻辑表达式 :{{ 与}} 符号包裹起来的语句则为模板的逻辑表达式

    2.逻辑表达式 :{{content}} 

    3.条件表达式 

    {{if条件}}

                <p>内容</p>

    {{else if }} 

                <p>内容</p>

    {{else}} 

    {{/if}}

    4.循环表达式无论数组或者是对象都可以用each进行遍历

    {{each list as value index}}

        <li>{{value.user}}</li>

    {{/each}}

    相应的小案例

    1.生成动态小页面的案例:引入文件 创建模板 

    原生方法的创建动态的结构

    简易方法的创建动态的结构

    实现跨域请求

    相关基础知识介绍:

    页面中有几个标签允许跨域请求资源 a链接的href、 img的src 、link的href script的src

    1.浏览器的同源限制。同源必须要域名协议 端口都相同,如果协议和端口造成的不同源,前端是无法解决

    2.跨域并不是请求发不出去,请求可以发出去,服务端能收到请求并且返回数据,只是返回回来的数据被浏览器拦截了。

    3.所有的跨域必须要经信息提供方的允许,如果未经允许即可获得的话,那是因为浏览器同源策略出现了问题

    实现跨域的两种的方式

    1.服务端对响应头进行设置 

    header('Access-Control-Allow-Origin:设置想要获取的路径')

    2.通过jsonp的方式

    jsonp的实现原理 ?

    利用了script标签的天然跨域特性,在发送请求的时候传递了一个函数给后台,后台最后以参数调用的方式返回数据,前端在另外一个的script标签内部创建相同的函数,来接受后台返回过来的参数

    jsonp实现跨域请求和ajax请求本质不一样:jsonp是通过script来发送跨域请求的,请求方式就是get请求,但ajax是通过XMLHttpRequests实现请求的,并且可以设置请求的方式

    为什么jsonp只能发送get请求?

    jsonp实现跨域请求,并不是通过异步对象实现,是通过script标签实现的,因此不能设置请求方式,标签的默认请求方式就是get

    既然script可以实现跨域请求,并且接受到数据,为什么后端不直接给前端返回数据,而是返回调用?

    script标签确实可以实现跨域请求,并且获取到数据,但是没有办法接受返回回来的数据,所以就有人想到,返回一个调用,那么只需要在另外一对script标签中,声明一个同名的函数体进行接受就可以了,后续的处理也是在这个函数当中

    3.XMLHttpRequest 2.0

    timeout: 可以当做属性,设置请求超时,也可以当做事件,请求超时的事件,单位是毫秒

    eg:    timeout:3000   timeout = function(e){console.log(e)}

    formData: 类似于表单序列化,收集所有带有name属性的表单值,并且拼接成字符串

    步骤: 1.通过id获取到表单 var myform = document.getElementById('#myform')

                2.var formdata = new FormData(myform)

                3. send(formdata );

       formdate还有一个功能就是可以自由追加参数 formdata.append("address","武汉")

    重点只能以post方式传递,浏览器会自动设置请求头,一定不能再添加请求头,要不然会是数据无法传递

    多个文件的上传:该文件上传标签应该添加 multiple, 并且文件name值后面追加一个中括号,

    eg:  name = files[]

    onprogress上传进度:重点,该事件一定一定要在请求发送xhr.send()之前设置

    xhr.upload.onprogress = function(e){ var current = e.loaded var total = e.total, var percent = (current/total * 100) +"%" 然后再设置标签的样式

    xhr.upload.onprogress 监听文件的上传进度

    JSON文件

    特点:1.一组花括号表示一个对象,一个对象通过键值对写入一堆相关数据

    2.一组方括号表示一个数组,多组对象通过数组的方式装载

    3.对象的所有属性都必须加上双引号,值没有undifined

    4.文件后缀名为.json,json文件格式的数据内不允许写注释

    操作json的方法

    JSON.parse()  将json格式的字符串转换为数组或者对象

    JSON.stringify()  将字面量对象或者数组转换为json格式的字符串

    XML文件

    文件特点:

    1.文件后缀名必须得为.xml格式

    2.必须得在头部声明,相当于doctype声明

    3.内容都以双标签包裹,可以嵌套和并列,不能交叉

    4.标签名称以字母和下划线,叫什么,多长的名字都无所谓

    头部的声明

    相关文章

      网友评论

        本文标题:2019-02-15 Ajax 简要笔记

        本文链接:https://www.haomeiwen.com/subject/ltppeqtx.html