AJAX
来源:互联网 发布:java动态表单 组件 编辑:程序博客网 时间:2024/06/06 07:18
AJAX
AJAX:Asynchronous JavaScript and XML 异步的JavaScript和XML
同步:一步步完成事
异步:同时完成几件事
AJAX是一种用来改善用户体验的技术,其实质是,使用XMLHttpRequest对象异步地向服务器发请求。
服务器返回部分数据,而不是一个完整的页面,以页面无刷新的效果更改页面中的局部内容。
核心:异步的JavaScript对象XMLHttpRequest(xhr)。
IE5.5,6:ActiveXObject(“Microsoft.XMLHttp”)
IE7,8,9,Chrome FireFox:new XMLHttpRequest()
判断浏览器是否支持XMLHttpRequest:
if(window.XMLHttpRequest){ //该浏览器支持XMLHttpRequest,可以直接new}else{ //创建ActiveXObject("Microsoft.XMLHttp")}
创建XMLHttpRequest对象:
function createxhr(){ var xhr=null; if (window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else{ xhr=new ActiveXObject("Microsoft.XMLHttp"); } return xhr;}
方法
- open(method,url,asyn)—–创建请求
method请求类型:get,post,delete
asyn:bool类型值,false同步,true异步 - send(body)—–发生请求,body是请求体
当请求方式为get的时候,body必须为null
当请求方式为post的时候,body为具体请求提交的数据
格式为:“key=value & key1=value1 &…” - setRequestHeader()—-指定请求消息头
当请求方式为post时,必须使用setRequestHeader重新设置请求消息头,否则请求数据获取不到。 - abort()——取消请求
- setAllResponseHeaders()—–获取响应消息头
- getRequestHeader()——–获取指定的响应消息头
属性
- onreadystatechange
当准备状态改变的时候,要调用的函数(回调函数)是谁 - readyState—-(本身在xhr上)
xhr的请求状态,请求状态必为以下5中状态之一
0:尚未初始化
1:初始化完成,正在发生请求
2:请求完成
3:正在接受响应数据
4:xhr数据接收(响应)成功 - states——–由服务器返回的状态码(本身在服务器上)
200:请求成功
404:资源未找到
500:服务器内部错误,如php代码写错了
注意:完整的判断xhr是否与服务器进行成功的请求响应必须是
xhr.readyState==4 && xhr.status==200;
- responseText——-服务器返回的文本
- responseXML——服务器返回的xml文本
发生异步请求的步骤
- 获取或创建AJAX对象:获取XMLHttpRequest对象
- 创建请求:调用xhr的open方法
- 设置回调函数:指定xhr的onreadystatechange事件
- 发生请求
例子:
<script>//创建xhrfunction createxhr(){ var xhr=null; if (window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else{ xhr=new ActiveXObject("Microsoft.XMLHttp"); } return xhr;}function getServerText(){ //获取xhr var xhr=createXhr(); //创建请求 xhr.open("get","server.php",true); //设置回调函数 xhr.onreadystatechange=function(){ if(xhr.readyState==4 && xhr.status ==200){ var resText=xhr.responseText; document.getElementById("showText").innerHTML=resText; } } //发生请求 xhr.send(null);}</script><body> <div id="showText"></div> <a href="javascript:getServerText();">提交数据</a></body>//server.php:<?php echo "<h1>hello world</h1>";?>
请求提交方式
- get
http://url/aaa.php?name=abc&age=18&gender=male
php:$_REQUEST[“name”] - post
xhr.open(“post”,url,true);
xhr.send(“name=zs&age=18&gender=malse”);
表单提交数据的Content-Type请求消息头
<form enctype=""></foem>
取值:text/plain
- application/x-www-form-urlencoded—默认
- multipart/form-data——-提交的有文件时,如传头像
使用post时,要在get的基础上改:
<script>//创建xhrfunction createxhr(){ var xhr=null; if (window.XMLHttpRequest){ xhr=new XMLHttpRequest(); }else{ xhr=new ActiveXObject("Microsoft.XMLHttp"); } return xhr;}function getServerText(){ //获取xhr var xhr=createXhr(); //创建请求 var url="server.php"; xhr.open("post",url,true);//去掉url后的变量 //加上 xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置回调函数 xhr.onreadystatechange=function(){ if(xhr.readyState==4 && xhr.status ==200){ var resText=xhr.responseText; document.getElementById("showText").innerHTML=resText; } } //改发生请求 xhr.send("name="+name+"&age="+age);}</script><body> <div id="showText"></div> <a href="javascript:getServerText();">提交数据</a></body>//server.php:<?php echo "<h1>hello world</h1>";?>
jQuery对AJAX的支持
- load():将服务器返回的文本添加到符合要求的节点上
用法:$obj.load(请求地址,请求参数);
请求参数:”username=tom & age=22”
或者 {‘username’:’tom’,’age’:’22’}
有请求参数时,load方法发生post请求,否则发生get请求 - get():发生get类型的请求
用法:$.get(请求地址,请求参数,回调函数,服务器返回的数据类型)
注:回调函数添加的参数是服务器返回的数据
服务器返回的数据类型:
html:HTML文本
text:文本
XML:XML文档
JSON:js对象
script:JavaScript脚本 - ajax():
用法:$.ajax({ });
{ }内的参数:
url—–请求地址 type:请求类型
data—–请求参数 dataType:服务器返回的数据类型
success:服务器处理正常对应的回调函数
error:服务器出错对应的回调函数
async:true(缺省),当值为false时,发生同步请求。
AJAX表单操作
使用AJAX提交数据:
- 获取表单元素通过document.getElementById或者jQuery的工厂函数获取页面元素值
- 将获取的页面元素值拼凑成字符串或者json字符串
- 使用AJAX异步提交表单
如:
一:获取表单元素:
loginname=$("#txtLoginName").val();password=$("#txtLoginPwd").val();hobbys=$("input[name=hobby]:checked");//获取多选项的值gender=$("input[name=rdoGender]:checked").val();//获取单选项的值
二,拼凑字符串
var logininfo="loginname="+loginname+"&password="+password+"&gender="+gender;for(var i=0;i<hobbys.length;i++){ logininfo+="&hobbys[]="+hobbys.get[i].value;}
表单的序列化
序列化:将对象状态转换为可保持或传输的格式过程
表单序列化:将表单元素转换为可提交的字符串或者JSON字符串
通过序列化可以轻松的实现数据存储和传输
在jQuery中可以通过serialize()方法将表单元素序列化成普通字符串,通过serializeArray()方法将表单元素序列化成json字符串。
serialize()方法:
格式:var data=$("#formId").serialize();
功能:将表单内容序列化成一个字符串
serializeArray()方法:
格式:var jsonData=$("#formId").serializeArray();
功能:将页面表单序列化成一个JSON结构的对象。注意不是JSON字符串。
比如:[{"name":"WCM","age":"18"},{...}]
获取数据为jsonData[0].name
异步表单提交:
一:获取表单提交方式,服务器地址,序列化表单
二:通过AJAX异步的将内容提交给服务器
三:表单提交方法中返回false,即阻止表单默认提交。
使用jQuery.form异步提交表单(插件):
ajaxForm():不能提交表单。在ready函数中,使用ajaxForm来为AJAX提交表单进行准备
ajaxSubmit():马上由AJAX来提交表单。你可以在任何情况下进行该项提交。
- Ajax
- Ajax
- AJAX
- AJAX
- AJAX
- AJAX
- AJAX
- ajax
- ajax
- Ajax
- ajax
- ajax
- AJAX
- Ajax
- Ajax
- Ajax
- ajax
- ajax
- ubuntu-kylin 16.04 LTS +VM12pro+py2.7+tensorflow0.8.0+mnist
- 51nod 1182 完美字符串
- 关于游戏架构设计的一些整理吧
- HashMap和Hashtable的区别
- 七夕手势识别小程序,献给爱人
- AJAX
- 浏览器极速模式和兼容模式差异
- windows下seafile fsck工具使用方法
- [来源未知][Dp]permut
- 打开properties乱码 乱码解决方案 jeesite.properties乱码 Properties Editor
- linux的ls命令详解(一)
- 使用Spring Mail API发送邮件
- 创建Core,并对索引进行CRUD操作
- GET和POST的区别