ajax详解
来源:互联网 发布:c语言实验报告流程图 编辑:程序博客网 时间:2024/06/14 09:38
Ajax: asynchronous JavaScript and xml (异步javascript和xml)
其是可以与服务器进行(异步/同步)交互的技术之一。
ajax的语言载体是javascript。其是浏览器的一个技术
最大特点:页面不刷新(用户体验非常好)
创建
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
考虑浏览器兼容
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
发起请求
- 创建ajax对象
- 创建一个新的http请求协议,并设置请求的服务器端地址
对象.open(请求方式get/post,url服务器端地址);
xhr.open(‘get’,’./02.php’); //这里xhr就是上面 ajax对象,后面就是处理文件 - 把http请求发送给服务器
对象.send(get-null/post请求数据);
xhr.send(null); //这是get这样写,post见后面
接受响应
ajax可以接收什么信息?
答:浏览器可以接收的信息ajax都可以接收,例如字符串、html标签、css样式内容、xml内容、json内容等等。
ajax接收返回的信息,需要结合readyState/onreadystatechange/responseText等属性一并操作:
onreadystatechange事件最多感知4种状态改变信息:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
4种状态
常用属性和方法
属性:
responseText: 以字符串形式接收服务器端返回的信息
readyState:ajax对象状态
0: 创建ajax对象
1: 有调用open方法
2: 有调用send方法
3: 只返回一部分数据
4: 数据返回完整
onreadystatechange:
是ajax的”事件”,在readyState状态发生变化的时候被触发
为了感知最多的状态信息,要设置在对象创建完毕之后
最多可以感知”1/2/3/4”标志状态信息
方法:
open()创建新的http协议(请求方式、地址)
send()发送请求(post请求数据)
手册截图
get和post
ajax对象.open(get/post, 请求地址);
不同:
① 给服务器传递数据量
get方式的大小是受限于浏览器,大部分浏览器是2k的限制
每个浏览器的限制不一样 chrome就是8K
http://网址/index.PHP?name=tom
上述请求通过get方式传递了9个字节的信息
1024字节 = 1k
post原则没有限制,php.ini对其限制为8M
② 安全方面,post传递数据较安全
③ 传递数据的形式不一样
get方式在url地址后边以请求字符串形式传递参数
http://网址/index.php?name=tom&age=23&addr=beijing
蓝色部分就是请求字符串,就是一些“名-值”对,中间使用&符号连接。
post方式是把form表单的数据给请求出来以xml形式传递给服务器
get
ajax之get请求需要注意的两个地方:
① 在url地址后边以请求字符串(传递的get参数信息)形式传递数据。
② 对中文、=、&等特殊符号需要编码处理
对特殊信息的处理:
在浏览器里通过get参数传递一些特殊符号信息会被误解混淆,例如 & = 等,浏览器会把这样的信息当做get参数的一部分而进行一个错误的解析,为了避免这种情况发生,可以对该信息进行编码处理。有的浏览器传递中文会出现不识别问题,也可以进行编码处理。
(编码后的信息是相对底层的信息,浏览器会自动识别,获取的时候无需反编码)
①.在php里边可以函数 urlencode()/urldecode()对特殊符号进行编码、反编码处理
②.在javascript里边可以通过encodeURIComponent ()对特殊符号等信息进行编码。
(以上红色函数可以把”特殊符号、中文”转变为浏览器可以识别不会混淆的信息。
编码后的信息为%号后接两个十六进制数)
这个函数编码一次,再进行编码是一样的
post
ajax之post请求需要注意的四个地方:
① 给服务器传递数据需要调用send(请求字符串数据)方法
② 调用方法setRequestHeader()把传递的数据组织为xml格式(模仿form表单传递数据)
③ 传递的中文信息无需编码,特殊符号像 &、=等 仍需要编码
④ 该方式请求的同时也可以传递get参数信息,同样使用$_GET接收该信息
同步和异步
ajax对象.open(方式get/post, url地址, [异步true]/同步false);
ajax是可以与服务器进行(异步或同步)交互的技术之一。
异步:同一个时间点允许执行进程.
同步:同一个时间点只允许执行一个进程
什么时候使用同步请求?
ajax绝大多数情况下进行异步请求,但是有的时候也要使用“同步请求”(其不能被取代)。例如页面有两部分内容,①ajax请求内容 和 ②正常的html内容输出,如果html的输出内容包括ajax请求的内容,就需要使得ajax请求完成了再进行html内容的输出,这样就要设置两者一前一后调用(而非同时调用),既要进行同步请求。
xml接受和处理
客户端(javascript+dom)<———ajax<———-服务器端的xml信息 ajax负责请求xml和接收xml信息,dom负责处理xml信息
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
JSON
json在javascript里边就是字面量对象
var obj = {名称:值,名称:值,名称:function(){}}
php生成json信息
json_encode(数组/对象)————>生成json信息
其中传进去一维数组是返回中括号的,其他是大括号.都是string类型
(json信息在php中的数据类型是字符串)
php处理json
json_decode(json信息,boolean); 反编码json信息
对json字符串信息进行反编码,变为当前语言可以识别的信息。对json字符串要求单引号定义
json_decode(json字符串,true)—>array
json_decode(json字符串,[false])—>object//基类
javascript接收处理json信息
ajax获得接口信息,javascript本身处理json信息
通过eval()把接收的json字符串变成真实的对象信息
js中把字符串对象变为实体对象信息
var obj=”{name:’kitty’,age:5}”;
eval(“var cat=”+obj);
eval(“var cat={name:’kitty’,age:5}”);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
无刷新表单提交和进度条
ajax对象有成员upload,该upload成员是一个对象,本身有onprogress事件
该事件每间隔100ms左右就执行一次,执行的时候可以感知附件已经上传和总大小等信息,
使得“已经上传大小”和“总大小”做对比可以获得上传附件的百分比,进而就可以设置进度条。
利用新技术FormData表单数据对象,可以实现快速收集表单信息。
FormData是HTML5的新技术,在主流浏览器都可以正常使用。
可以利用FormData实现附件信息的收集:普通表单域 和 上传文件域 均可以收集
FormData使用注意事项:
1,无需使用setRequestHeader()方法
2.要求每个表单域里面必须有name属性
3.表单域内内部有特殊符号($=&)无需编码
4.在form标签里边无需设置enctype=”multipart/form-data”属性(即使有上传文件域也不需要设置)
- ajax开发:ajax详解
- ajax 详解
- Ajax详解
- ajax详解
- ajax详解
- Ajax详解
- AJAX 详解
- Ajax详解
- ajax 详解
- AJAX详解
- AJAX详解
- Ajax详解
- AJAX详解
- Ajax详解
- AJAX详解
- ajax详解
- Ajax详解
- AJAX详解
- Oracle 通过UTL_HTTP 发送http请求并处理发送内容中包含空格和特殊字符的问题
- phpcms v9 下拉菜单 二级 三级子栏目调用方法
- 走向三年Java
- pytube——下载YouTube视频的python库
- tensorflow实现对tensor中各个元素求逻辑‘与’
- ajax详解
- java rmi connection refused
- D3.js:坐标轴
- java后端书架
- eclipse Neon.3 Release (4.6.3)中maven项目使用阿里云镜像
- Java IO流分析整理
- java web 项目向手机发送短信
- C++ 中 ZeroMemory、memset 危险需慎用
- HTML中属性ID和属性NAME有何区别