AJAX笔记

day01
AJAX DAY01:
* 基本内容
* 同步交互与异步交互
* 同步交互
* 客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户是不能做任何其他事情(等).
* 异步交互
* 客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做任何其他事情(不等)
* AJAX
* Asynchronous JavaScript and Xml
* 直译中文 - javascript和XML的异步
* (不严格的定义)客户端与服务器端进行交互,而无需刷新当前页面的技术,称之为Ajax
* Ajax实现的是B/S架构下的异步交互
* 实现异步交互的技术
* <iframe src="">元素
* 同步与异步的区别
* 同步交互
* 执行速度相对比较慢
* 响应的是完整的HTML页面
* 异步交互
* 执行速度相对比较快
* 响应的是部分数据
* Ajax具有核心对象
* XMLHttpRequest对象
* 创建XMLHttpRequest对象
function getXhr(){
// 声明XMLHttpRequest对象
var xhr = null;
// 根据浏览器的不同情况进行创建
if(window.XMLHttpRequest){
// 表示除IE外的其他浏览器
xhr = new XMLHttpRequest();
}else{
// 表示IE浏览器
xhr = new ActiveXObject('Microsoft.XMLHttp');
}
return xhr;
}
// 创建核心对象
var xhr = getXhr();
* Ajax的核心对象
* 属性
* readyState
* status
* 方法
* open() - 与服务器端建立连接
* send() - 向服务器端发送请求
* 事件
* onreadystatechange事件
* 作用 - 监听服务器端的通信状态改变
* 实现Ajax的异步交互步骤
* 创建XMLHttpRequest核心对象
* 固定写法 - 独立编写
* 与服务器端建立连接
* 使用XMLHttpRequest对象的open(method,url)方法
* method - 设置当前请求的类型
* url - 设置当前请求的地址
* 向服务器端发送请求
* 使用XMLHttpRequest对象的send(请求参数)方法
* 请求参数的格式 - key=value
* 接收服务器端的响应数据
* 使用XMLHttpRequest对象的onreadystatechange事件,监听服务器端的通信状态
* 使用XMLHttpRequest对象的readyState属性,判断服务器端的当前状态(0-4)
* 使用XMLHttpRequest对象的status属性,判断服务器端的状态码(200)
* 使用XMLHttpRequest对象的responseText属性,接收服务器端的响应数据
* GET与POST的区别
* GET请求类型
* send()方法不起作用,但是不能被省略
xhr.send(null);
* 请求参数 - 添加到URL?key=value
* POST请求类型
* send()方法起作用
* 在send()方法被调用前,使用setRequestHeader()方法设置请求头信息
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
* 使用Ajax的原则
* 小则怡情,大则伤身
* 另外的实现Ajax的步骤
* 创建XMLHttpRequest对象
* 注册监听
* 建立连接
* 发送请求
* 实现Ajax的六步是什么?(不标准)
* 创建XMLHttpRequest对象
* 建立连接
* 发送请求
* 注册监听 - onreadystatechange事件
* 获取服务器端的通信状态 - readyState
* 获取服务器端的状态码
*



day02
回顾AJAX第一天内容:
* 基本内容
* 同步交互与异步交互
* 同步交互
* 客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户不能做任何其他事情
* 异步交互
* 客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做任何其他事情
* Ajax
* Ajax实现B/S架构下的异步交互
* (不严格定义)客户端向服务器端发送请求,而无需刷新当前页面的技术
* 实现异步交互的其他技术
* <iframe src="">元素
* Ajax的核心对象 - XMLHttpRequest对象
* XMLHttpRequest对象
* 创建核心对象
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
* 属性
* readyState属性 - 表示当前服务器端的通信状态
* 0 - (服务器端)尚未初始化
* 1 - (服务器端)正在接收
* 2 - (服务器端)接收完毕
* 3 - (服务器端)正在响应
* 4 - (服务器端)响应完毕
* status属性 - 表示当前服务器端的状态码
* 200 - 请求成功
* 404 - 网页找不到(请求路径不正确)
* 500 - 服务器端错误
* 方法
* open(method,url)方法
* 作用 - 与服务器端建立连接
* 参数
* method - 设置请求类型(GET或POST)
* url - 设置请求地址
* send()方法
* 作用 - 向服务器端发送请求参数
* 事件
* onreadystatechange事件
* 作用 - 监听服务器端的通信状态
* 实现Ajax的步骤
* 创建XMLHttpRequest对象
var xhr = getXhr();
* 与服务器端建立连接 - open()
* GET方式 - open("get")
* POST方式 - open("post")
* 向服务器端发送请求 - send()
* GET方式
* send()方法不起作用(不能使用send()方法发送请求数据)
* send()方法不能被省略 - send(null)
* 请求数据 - 增加在URL?key=value
* POST方式
* send()方法起作用
* 注意
* 在send()方法调用前,调用setRequestHeader()方法
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
* 接收服务器端的响应
* 使用onreadystatechange事件监听服务器端
* 判断readyState属性值等于4(响应完毕)
* 保证status属性值为200(表示请求成功)
* 使用responseText属性接收服务器端的响应数据
* 面试题
* 另外四步实现
* 创建核心对象
* 注册监听
* 建立连接
* 发送请求
* 实现Ajax的六步是什么?

AJAX DAY02:
* 接收服务器端的响应数据
* 使用XMLHttpRequest核心对象的responseText属性
* 该属性只能接收文本(HTML)格式
* 问题
* 解析过程比较复杂(拆串)
* 拆串或拼串极容易出错
* XML格式
* 基本内容
* HTML、XHTML、DHTML和XML的区别
* HTML就是网页 - 元素定义大小写
* XHTML就是严格意义的HTML - 元素定义小写
* DHTML - BOM|DOM
* XML - 配置文件|数据格式
* XML文件的扩展名为".xml"
* XML的定义方式与HTML非常相似
* HTML的元素预定义好的
* XML允许自定义元素
* XML的版本
* 1.0版本 - 目前唯一版本
* 1.1版本 - 几乎没有人使用
* 注意
* 版本不会再更新
* XML的作用
* 作为数据格式 - 存储数据
* XML语法
* 声明
<?xml version="1.0" encoding="UTF-8" ?>
* version - 设置当前XML文件的版本
* encoding - 设置当前XML文件的编码
* 注意 - 出现在0行0列上
* 定义元素
* 根元素
* 必须是起始标签
* 只能定义一个
* 定义元素
* 元素名可以自定义
* 分类
* 起始标签或单标签
* 定义属性
* 定义注释
* 练习 - 使用XML文件定义省份和城市信息
* 如何定义都可以,符合XML语法即可
* 决定着后面使用Javascript解析的难易程度
* DOM解析XML
* 创建XML的解析器
function parseXML(xml){
// 声明解析XML后的DOM对象
var xmlDoc = null;
// 根据不同的浏览器
if(window.DOMParser){
// 其他浏览器
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xml,"application/xml");
}else{
// IE浏览器
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(xml);
}
return xmlDoc;
}
* 解析XML与解析HTML一致
* 很少使用ById和ByName两个方法
* 注意
* 浏览器不允许读取外部的XML文件
* 浏览器解析符合XML格式的字符串
* Ajax中的XML格式
* 请求的数据格式 - XML
* 客户端如何构建符合XML格式的数据
* 构建的数据类型 - 字符串(string)类型
* 字符串的内容符合XML格式的语法要求
* 服务器端如何接收符合XML格式的数据
* 接收客户端的请求数据 - 字符串(string)类型
* PHP集成了DOM的相关内容
* DOMDocument类
* DOMElement类
* DOMNode类
* 响应的数据格式 - XML
* 服务器端如何构建符合XML格式的数据
* 设置服务器端的响应头"Content-Type"值为"text/xml"
* 构建符合XML格式数据内容
* 手动方式构建字符串(string)内容
* DOMDocument对象的方法
* loadXML(符合XML格式的字符串);
* saveXML()方法进行响应
* 客户端如何接收符合XML格式的数据
* 使用XMLHttpRequest对象的responseXML属性接收
* 接收回来的就是XML DOM对象(不需要使用XML解析器进行解析)
* 直接使用DOM解析XML DOM对象即可
* 练习 - 二级联动(服务器端响应数据格式为XML格式)
* JSON格式
* 基本内容
* JSON - JavaScript Object Notation(JS原生支持)
* JSON数据格式源于javascript
* 特点
* 易于程序员阅读和编写
* 易于计算机解析和生成
* JSON目前是网络上使用最广泛的数据格式之一
* JSON的结构
* Array - 数组
* Object - 对象
* 支持的数据类型
* String字符串
* Number数值
* Boolean - true|false
* Object
* Array
* null
* Ajax中的JSON格式
* 请求格式为JSON
* 客户端向服务器端发送请求为JSON格式的数据
* 构建符合JSON格式的字符串
* 保证定义字符串时,使用单引号(里面使用双引号)
* 服务器端接收JSON格式的数据
* 接收客户端的数据
* 使用json_decode()函数进行解析
json_decode($json,true)
* 响应格式为JSON
* 服务器端向客户端发送响应为JSON格式的数据
* 使用json_encode()函数将PHP变量(array)转换成符合JSON格式的字符串
* 客户端接收JSON格式的数据
* 使用XMLHttpRequest对象的responseText属性接收
* 没有responseJSON属性
* 使用eval()函数进行转换
* 作业 - 使用JSON格式完成二级联动
* HTML(文本格式)、XML格式及JSON格式的优缺点
* HTML格式
* 优点 - 简单
* 缺点 - 解析复杂
* XML格式
* 优点 - 易于构建复杂数据
* 缺点 - 构建、解析复杂
* JSON格式
* 优点 - 轻量级
* 缺点 - 可能转换失败
* 回顾内容
* DOM - 独立于任何开发语言的
* DOM的分类
* DOM CORE
* DOM HTML
* DOM XML
* DOM CSS
* DOM API
* 获取元素
* 创建元素
* 替换元素
* 删除元素
* 插入元素
* ...
*



day03
回顾AJAX第二天内容:
* XML格式
* 基本内容
* XML译为可扩展标记语言
* XML文件的扩展名为".xml"
* XML定义元素与HTML页面类似
* HTML页面的元素是预定义的
* XML的元素是自定义的
* XML的用途
* 配置文件
* 存储数据
* XML基础语法
* 声明
<?xml version="1.0" encoding="utf-8"?>
* version - 设置当前XML文档的版本
* encoding - 设置当前XML文档的编码
* 注意 - 必须出现在0行0列
* 定义元素
* 起始元素 - <></>
* 单元素 - < />
* 定义属性
* 使用注释
* DOM解析XML
* 创建XML解析器
function parseXML(xml){
// 解析后得到的XML DOM对象
var xmlDoc = null;
// 根据不同浏览器操作
if(window.DOMParser){// 其他浏览器
// 创建XML解析器
var parser = new DOMParser();
// 通过解析器得到DOM对象
xmlDoc = parser.parseFromString(xml,"application/xml");
}else{// IE浏览器
// 得到XML DOM对象
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
// 关闭异步加载
xmlDoc.async = false;
// 指定加载XML
xmlDoc.loadXML(xml);
}
// 返回XML DOM对象
return xmlDoc;
}
* 利用DOM API解析XML - 类似于DOM解析HTML
* Ajax中的XML格式
* 客户端向服务器端发送请求 - XML格式
* 客户端如何构建XML格式数据
* 请求数据格式 - key=value
* 构建符合XML格式的字符串(string)
* 服务器端如何接受XML格式数据
* 利用$_GET或$_POST接收请求数据
* PHP集成了DOM内容
* DOMDocument对象
* DOMElement对象
* DOMNode对象
* 服务器端向客户端发送响应 - XML格式
* 服务器端如何构建XML格式的数据
* 手工方式构建符合XML格式的字符串
* 通过saveXML()方法将PHP变量构建成符合XML格式
* 客户端如何接收XML格式的数据
* 使用responseXML属性接收
* 利用DOM进行解析
* JSON格式
* 基本内容
* JSON - JavaScript Object Notation
* 定义
* 是一种轻量级(相对于XML)的数据交换格式
* JSON源于JavaScript,原生JavaScript支持JSON
* 特点
* 易于程序员阅读和编写
* 易于计算机生成和识别
* JSON的结构
* Array - 数组
* Object - 对象
* 注意
* 数组和对象之间可以相互嵌套(多层嵌套)
* 数据类型
* String
* Number
* Boolean
* Array
* Object
* null
* Ajax中的JSON格式
* 客户端向服务器端发送请求 - JSON
* 客户端如何构建JSON格式数据
* 请求数据格式 - key=value
* 手工构建符合JSON格式的字符串
'{"name":"zhangwuji","pwd":"123"}'
* 服务器端如何接收JSON格式的数据
* 利用$_GET或$_POST接收请求数据
* 使用json_decode()函数将符合JSON格式的字符串,转换为PHP变量
json_decode($json,true) - array数组
* 服务器端向客户端进行响应 - JSON
* 服务器端如何构建JSON格式的数据
* 手工方式构建符合JSON格式的字符串
* 使用json_encode()函数将PHP变量转换为符合JSON格式的字符串
* 客户端如何接收JSON格式的数据
* 使用responseText属性接收数据
* 使用eval()函数进行转换
var json = eval("("+data+")");


AJAX DAY03:
* jQuery中的Ajax
* 封装第一层 - 类似于原生Ajax的用法
* $.ajax() - 最复杂
* 选项
* url - 请求地址
* type - 请求类型,默认为GET
* async - 是否异步,默认为true
* data - 请求数据,格式为key:value
* dataType - 响应数据格式
* HTML格式
* XML格式
* JSON格式
* success - 请求成功后的回调函数
function(data,textStatus){}
* data - 响应数据内容
* textStatus - success,请求状态
* error - 请求失败后的回调函数
function(XMLHttpRequest,textStatus,errorThrown){}
* XMLHttpRequest - Ajax的核心对象
* textStatus - 请求状态
* error、timeout及notmodified等
* errorThrown - 错误异常信息
* 封装第二层 - 基于第一层再次封装
* $().load(url,data,callback) - 最简单、局限性最大
* 参数
* url - 设置当前Ajax的请求地址
* data - 设置当前Ajax的请求数据
* 格式要求为key:value,构建Object即可
* callback - Ajax请求成功后的回调函数
* 该回调函数的形参(data),表示服务器端响应的数据内容
* 问题
* 请求类型由是否发送请求数据决定
* 没有发送请求数据时,请求类型为GET
* 如果发送请求数据时,请求类型为POST
* 默认接收服务器端的数据内容
* 是以字符串类型(HTML格式)进行接收
* 无法使用XML格式或JSON格式
* $.get(url,data,callback,type) - 请求类型是GET
* 参数
* url - 设置当前Ajax的请求地址
* data - 设置当前Ajax的请求数据
* 格式要求为key:value,构建Object即可
* callback - Ajax请求成功后的回调函数
* 该回调函数的形参(data),表示服务器端响应的数据内容
* type - 设置服务器端响应数据的格式
* 默认值 - HTML格式
* xml - XML格式
* json - JSON格式
* $.post() - 请求类型是POST
* 使用方式与$.get()方法一致
* 封装第三层 - 特殊用法
* $.getScript() - 动态读取脚本(JavaScript代码)
* $.getJSON() - 接收JSON格式数据
*

PM:
AJAX DAY03:
* jQuery中的Ajax
* 封装第一层 - 类似于原生Ajax的用法
* $.ajax() - 最复杂
* 选项
* url - 请求地址
* type - 请求类型,默认为GET
* async - 是否异步,默认为true
* data - 请求数据,格式为key:value
* dataType - 响应数据格式
* HTML格式
* XML格式
* JSON格式
* success - 请求成功后的回调函数
function(data,textStatus){}
* data - 响应数据内容
* textStatus - success,请求状态
* error - 请求失败后的回调函数
function(XMLHttpRequest,textStatus,errorThrown){}
* XMLHttpRequest - Ajax的核心对象
* textStatus - 请求状态
* error、timeout及notmodified等
* errorThrown - 错误异常信息
* 封装第二层 - 基于第一层再次封装
* $().load(url,data,callback) - 最简单、局限性最大
* 参数
* url - 设置当前Ajax的请求地址
* data - 设置当前Ajax的请求数据
* 格式要求为key:value,构建Object即可
* callback - Ajax请求成功后的回调函数
* 该回调函数的形参(data),表示服务器端响应的数据内容
* 问题
* 请求类型由是否发送请求数据决定
* 没有发送请求数据时,请求类型为GET
* 如果发送请求数据时,请求类型为POST
* 默认接收服务器端的数据内容
* 是以字符串类型(HTML格式)进行接收
* 无法使用XML格式或JSON格式
* $.get(url,data,callback,type) - 请求类型是GET
* 参数
* url - 设置当前Ajax的请求地址
* data - 设置当前Ajax的请求数据
* 格式要求为key:value,构建Object即可
* callback - Ajax请求成功后的回调函数
* 该回调函数的形参(data),表示服务器端响应的数据内容
* type - 设置服务器端响应数据的格式
* 默认值 - HTML格式
* xml - XML格式
* json - JSON格式
* $.post() - 请求类型是POST
* 使用方式与$.get()方法一致
* 封装第三层 - 特殊用法
* $.getScript(url,callback) - 动态读取脚本(JavaScript代码)
* url - 读取脚本的地址(本地或服务器)
* callback - 读取成功后的回调函数
* $.getJSON() - 接收JSON格式数据
* 表单的Ajax异步请求
* 表单的序列化
* serialize()方法
* 返回JSON字符串
* 格式 - {key:value,key:value,..}
* serializeArray()方法
* 返回JSON对象
* 格式 - [obj1,obj2,obj3,...]
* 注意
* 表单元素必须具有name属性值
* jQuery.form插件
* 作用 - 实现表单的异步提交
* 两个核心方法
* ajaxForm()方法
* ajaxSubmit()方法 - 使用Ajax异步提交表单
* 底层机制
* 表单提交机制
* 表单异步提交的方式
* 不再使用submit按钮,而是使用button按钮
* 通过为button按钮绑定click事件
* 表单的序列化
* 表单的异步提交
* (常用)依旧使用submit按钮
* 在<form>元素绑定onsubmit事件
* 在onsubmit事件的处理函数中
* 表单的序列化
* 表单的异步提交
* 阻止表单默认行为(return false)
* 跨域请求 - $.getJSON()方法
* 跨域
* 完全跨域 - IP不同
* http://www.baidu.com
* http://www.tedu.cn
* 跨子域 - IP相同,但端口号不同
* http://127.0.0.1:8888
* http://127.0.0.1:9999
* 域名
* 顶级域名
* http://www.baidu.com
* 二级域名
* http://wenku.baidu.com
* http://www.baidu.com/kongjian
* 万维网协议
* 默认是不允许跨域请求的
* 实现跨域
* Cookie
* 基本内容
* 浏览器的缓存
* 存储在浏览器内存中
* 关闭浏览器(窗口)后,数据会被自动销毁
* 存储在用户电脑硬盘中
* 关闭浏览器(窗口)后,数据不会被销毁
* Cookie(小甜饼)
* 缓存文件 - 一些用户数据存储在此
* 问题
* 用户数据是以明码(明文)来存储的
* Cookie谁都可以读取
* A网站生成的Cookie文件,归属到百度
* 如何操作操作
* 读取Cookie - 将用户名或密码从Cookie读取
* document.cookie
* 写入Cookie - 将用户名或密码写入到Cookie文件
* 格式 - key=value;expires=时间
* document.cookie

原文地址:https://www.cnblogs.com/skorzeny/p/5668581.html