AJAX学习总结(入门)

来源:互联网 发布:网络被高智慧生物屏蔽 编辑:程序博客网 时间:2024/05/19 16:03

介绍

读音:[ˈeɪˌdʒæks]

AJAX =Asynchronous JavaScript and XML(异步的JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

学习AJAX需要了解HTML、JS、CSS的知识。

作用

场景:

在网页上填写简历,页面中有几十项信息需要填写,填写过程中有若干项填写错误。

没有AJAX:

填写完成后,点击提交,上传所有信息,等待服务器的检查,再通知某一项填写错误。

使用AJAX:

      填写过程中,每填写完一项,立刻发送到服务器检查,实时提示某一项是否填写正确。

使用

AJAX使用XMLHttpRequest对象实现异步请求、局部刷新,使用方法如下:

·        运用HTML和CSS来实现页面,表达信息;

·        运用XMLHttpRequest和web服务器进行数据的异步交换;

·        运用JavaScript操作DOM,实现动态局部刷新。

创建 XMLHttpRequest 对象

var request;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
     request = new XMLHttpRequest();
} else {// code for IE6, IE5
     request = new ActiveXObject("Microsoft.XMLHTTP");
}

XMLHttpRequest向服务器发送请求

request.open("GET","service.asp",true);
request.send();

方法

描述

open(method,url,async)

规定请求的类型、URL以及是否异步处理请求。

·         method:请求的类型;GET 或 POST

·         url:文件在服务器上的位置

·         async:true(异步)或 false(同步),默认为true

send(string)

将请求发送到服务器。

·         string:仅用于 POST 请求

GET:一般用于信息获取。

·           使用URL传递参数。

·           对发送信息的数量也有限制,一般在2000个字符。

POST:一般用于修改服务器上的资源。

·           对所发送信息的数量无限制。

与POST相比,GET更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用 POST 请求:

·        无法使用缓存文件(更新服务器上的文件或数据库)

·        向服务器发送大量数据(POST没有数据量限制)

·        发送包含未知字符的用户输入时,POST比GET更稳定也更可靠

GET 请求示例

一个简单的 GET 请求:

request.open("GET","service.asp",true);
request.send();

在上面的例子中,得到的可能是缓存的结果。为了避免这种情况,可以向URL添加一个唯一的ID:

request.open("GET","service.asp?t=" + Math.random(),true);
request.send();

如果需要在GET方法中传递参数,需要在URL中添加信息:

request.open("GET","service.asp?fname=Bill&lname=Gates",true);
request.send();

POST 请求示例

使用POST请求传递参数,一定要记得在open和send方法之间使用setRequestHeader方法设置Content-Type为“application/x-www-form-urlencoded”:

request.open("POST","service.asp",true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send("fname=Bill&lname=Gates");

XMLHttpRequest取得服务器的响应

当请求被发送到服务器时,客户端需要执行一些基于响应的任务。

当使用async=true时,可通过onreadystatechange事件处理服务器的应答:

request.onreadystatechange=function(){
if (request.readyState==4 && request.status==200){
        //显示服务器返回的结果
document.getElementById("result").innerHTML=request.responseText;
    }
}

每当readyState改变时,就会触发onreadystatechange事件。

readyState属性存有XMLHttpRequest的状态信息。

下面是XMLHttpRequest对象的三个重要的属性:

属性

描述

onreadystatechange

存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

readyState

存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

·         0: 请求未初始化,即open还没有调用

·         1: 服务器连接已建立,即open已经调用

·         2: 请求已接收,即已接收到头信息

·         3: 请求处理中,即已接收到响应主体

·         4: 请求已完成,且响应已就绪,即响应已完成

status

200: "OK"

404: 未找到页面

在onreadystatechange事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。

当readyState等于4且状态为200时,表示响应已就绪。

示例

视频教程:http://www.imooc.com/video/5913

例子简介:

·        查询员工信息,可以通过输入员工编号查询员工的基本信息。

·        新建员工信息,包含员工姓名、编号、性别、职位。

源码:ajax示例源码

扩展知识:

·        PHP介绍及简单示例。(使用PHP实现服务器端的查询和新建功能)

·        XAMMP介绍及启动。(XAMPP包含Apache、MySQL、PHP、PERL,是一个功能强大的建XAMPP软件站集成软件包)

·        Dreamweaver中配置web服务器,制作网站,进行本地测试。

·        Fiddler监听HTTP请求。(无需客户端代码既可测试服务器代码)。

扩展一:JSON

介绍

JSON:JavaScript对象表示法(JavaScript Object Notation)。

JSON是存储和交换文本信息的语法,类似XML。它采用键值对的方式来组织,易于人们阅读和编写,同时也易于机器解析和生成。

JSON是独立于语言的,也就是说不管什么语言,都可以解析JSON,只需要按照JSON的规则来就行。

与XML比较

JSON的长度和XML格式比起来很短小。

JSON读写的速度比XML快。

JSON可以使用JavaScript内建的方法直接进行解析,转换成JavaScript对象,非常方便。

与AJAX的关系

在AJAX中,使用JSON传递数据已成为事实上的标准,很少使用XML。

语法

JSON数据的书写格式是:名称/值对。

例如:”name”:”ZhangSan”

注意:与JavaScript的对象表示法有些区别,就是键值在JS中不需要使用引号,但是在JSON中必须要有引号。

JSON的值可以是下面这些类型:

·        数字(整数或浮点数),比如123,1.23

·        字符串(在双引号中)

·        逻辑值(true或false)

·        数组(在方括号中)

·        对象(在花括号中)

·        null

例如:

{
    "staff": [
        {
            "name": "user1",
            "age": 23
        },
        {
            "name": "user2",
            "age": 22
        },
        {
            "name": "user3",
            "age": 21
        }
    ]
}

解析

JSON在JS中的解析有两种方法:eval和JSON.parse。

var jsondata = ‘{"staff": [{"name": "user1","age": 23},{"name": "user2","age": 22},{"name": "user3","age": 21}]}’;
var jsonobj = eval(‘(’ + jsondata + ‘)’);
alert(jsonobj.staff[0].name);

在代码中使用eval是很危险的,eval无法捕获json对象中的语法错误!特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身,该方法还可以捕捉JSON中的语法错误。

var jsondata = ‘{"staff": [{"name": "user1","age": 23},{"name": "user2","age": 22},{"name": "user3","age": 21}]}’;
var jsonobj = JSON.parse(jsondata);
alert(jsonobj.staff[0].name);

校验及格式化

JSON在线校验工具:http://jsonlint.com/

示例

视频教程:http://www.imooc.com/video/6159

扩展二:jQuery

介绍

jQuery是一个轻量级的JavaScript库。

jQuery极大地简化了JavaScript编程。

与AJAX的关系

jQuery中封装了AJAX的方法,利用第三方库可以不考虑浏览器,简化操作。

语法

基础语法:

$(selector).action();

获取指定ID的对象的值:

$(“#id”).val();

设置指定ID的innerHTML的值:

$(“#id”).html(string);

使用AJAX:

$.ajax({settings})

·        type:类型,“POST”或“GET”,默认为“GET”

·        url:发送请求的地址

·        data:是一个对象,连同请求发送到服务器的数据

·        dataType:预期服务器返回的数据类型。如果不指定,jQuery将自动根据HTTP包MIME信息来只能判断,一般我们采用json格式,可以设置为“json”

·        success:是一个方法,请求成功后的回调函数。传入返回后的数据,以及包含成功代码的字符串

·        error:是一个方法,请求失败时调用此函数,传入XMLHttpRequest对象

示例

$.ajax({
type:"POST",
url:"servicejson.php",
dataType:"json",
data:{
name: $("#name").val(),
number: $("#number").val(), 
sex: $("#sex").val(),
job: $("#job").val()
},
success: function(responseJson){
if (responseJson.success){
$("#createResult").html(responseJson.msg);
}else{
$("#createResult").html("出现错误:"+responseJson.msg);
                 }
},
error: function(xmlHttpRequest){
alert("error:"+xmlHttpRequest.status);
}
});              

扩展三:跨域问题的处理

介绍

域名地址的组成:

当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。

不同域之间相互请求资源,就算做“跨域”。

与AJAX的关系

JavaScript出于安全方面的考虑,有同源策略的限制,不允许跨域调用其他页面的对象。

解决方法一:代理

通过在同域名的web服务器端创建一个代理。

例如:

北京服务器(域名:www.beijing.com)

上海服务器(域名:www.shanghai.com)

可以在北京的web服务器的后台建立一个上海服务器的代理www.beijing.com/proxy-shanghaiservice.asp来调用上海服务器www.shanghai.com/service.asp的服务,然后再把响应结果返回给前端,这样前端调用北京同域名的服务就和调用上海的服务效果相同了。

解决方法二:JSONP

JSONP可以解决主流浏览器的跨域数据访问的问题,只能解决GET方法的跨域访问。

在前端代码中声明jsonp:

$.ajax({
type:"GET",
url:"http://127.0.0.1:8080/ajaxdemo/servicejsonp.php?number="+$("#idNum").val(),
dataType:"jsonp",
jsonp:"callback",
success: function(responseJson){
if (responseJson.success){
$("#searchResult").html(responseJson.msg);
}else{
$("#searchResult").html("出现错误:"+responseJson.msg);
}
},
error: function(xmlHttpRequest){
alert("error:"+xmlHttpRequest.status);}
}
);               

在后台代码(PHP)中调用:

function get(){
$jsonp = $_GET["callback"];
echo $jsonp.'({"success":true,"msg":"Method GET!"})';
}                

 

解决方法三:XMLHttpRequest Level2

HTML5提供的XMLHttpRequest Level2(XHR2)实现了跨域访问。

不过IE10以下的版本不支持XHR2这一标准。

使用XHR2只需要在服务器端的代码中添加两行代码允许跨域访问即可:

header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:POST,GET");

学习资源

AJAX教程:http://www.w3school.com.cn/ajax/index.asp

AJAX视频教程:http://www.imooc.com/view/250

JSON教程:http://www.w3school.com.cn/json/index.asp

jQuery教程:http://www.w3school.com.cn/jquery/index.asp

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 知道弟兄的孩子是别人的怎么办? 办居住证的回执单丢了怎么办 领取居住证的回执单丢了怎么办 北京居住证网上申报信息填错怎么办 买家退回来的货有问题怎么办 居转户过程中生的小孩户口怎么办 人才引进申请上海户口被拒怎么办 网络购高铁票身份证没有验证怎么办 高速遇到很浓的团雾怎么办 对于大巴不按座位坐的人该怎么办 火车上遇到占座不让的人怎么办 滁州婴儿打疫苗的绿本子怎么办 检查四维说宝宝嘴巴显示不清怎么办 携程订票付款成功一直没出票怎么办 手机微信支付密码忘了怎么办 存入卡里的钱却说余额不足怎么办 买高铁票身份证未通过审核怎么办 网上订演出票不配送了怎么办 百度糯米订的演出票不配送了怎么办 高铁误点改签后的车次没票了怎么办 高铁晚点没赶上下班车怎么办 上班期间单位没给交养老保险怎么办 一键启动车钥匙遥控失灵怎么办 已经订购的火车票误了火车怎么办 飞机去程取消分开买的返程怎么办 订完学生票发现使用次数过了怎么办 坐火车买学生票没带学生证怎么办 买了学生票学生证磁条没了怎么办 买了动车学生票没带学生证怎么办 身份证没磁了怎么办能买火车票 格力空调保修单丢了怎么办 格力空调保修期内坏了怎么办 国际联程航班第一程延误怎么办 大麦网演唱会的票售罄了怎么办 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办?