Ajax基础

一、Ajax介绍

 Ajax全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),其用途在于不必重新加载页面即可与服务器交换数据,达到更新页面内容的效果。

同步与异步:

所谓同步相当于两个人在聊天,你一句我一句,有一定的顺序步骤。在浏览器里就是用户在浏览的时候,服务器端在等待,服务器端在处理数据的时候,浏览器端在等待。

异步相当于两个人在聊天和大街上的车开来开去没有关系。浏览器将所需要的请求地址交给ajax对象,ajax对象去服务器端取所需数据,ajax对象再将数据交给浏览器端。再举个例子,好比上课时老师想喝水了,不能自己去买让学生干等着,就会派个学生去买个水。

在这个过程中,起关键性作用的是ajax对象。

二、创建ajax对象

Ajax的核心其实就是javascript的XMLHttpRequest

包括IE7以上、Chrome、FireFox、opera等主流浏览器创建方法:

// 主流浏览器创建XMLHttpRequest的方法
var request=new XMLHttpRequest();
console.log(request);

低版本的IE浏览器采用下面这种方法

var request=new ActiveXObject("Microsoft.XMLHttp");

为了能够同时适应各种版本的对象创建,我们可以检查浏览器是否支持XMLHttpRequest对象,如果支持,创建XMLHttpRequest对象,如果不支持,则创建ActiveXObject对象。

var request;
if(window.XMLHttpRequest){
    request=new XMLHttpRequest();
}
else {
    request=new ActiveXObject("Microsoft.XMLHttp");
}
console.log(request);

三、建立连接与发起请求

通过XMLHttpRequest对象的open与send方法创建对服务器的HTTP请求。

open方法有三个参数。第一个参数为请求方式,取值get/post,第二个参数为URL,第三个参数为是否异步,默认为true。

request.open('get','index.php');//建立连接
request.send();//发送请求

为了检验我们是否请求成功,我们可以写个小测试,html代码如下。

<body>
<script type="text/javascript">
    window.onload=function () {
        document.getElementById('btn').onclick=function () {
            var request;
            if(window.XMLHttpRequest){
                request=new XMLHttpRequest();
            }
            else{
                request=new ActiveXObject("Microsoft.XMLHttp");
            }
            request.open('get','index.php');//建立连接
            request.send();//发送请求
        };
    }
</script>
<input type="button" value="点击" id="btn">
</body>

index.php代码如下:

<?php 
$fp=fopen('./index.txt', 'a');
$time=date('Y-m-d H:i:s'."\r\n");
fputs($fp,$time);
 ?>

右击浏览器打开审查元素,选择Network选项卡,看到有我们的test.html,我们分别点击了三次按钮,共出现了三个index.php。

接下来为了检验php是否有正常运行,可以打开index.txt进行查看,如果显示如下代表一切顺利。

四、接受返回的数据

浏览器可以接受服务器端的数据格式有字符串、XML、JSON。

在接受数据的过程中,我们需要借助到readyState属性,它共有五个状态,从0到4表示。

  • 0:请求未初始化
  • 1:服务器连接已经建立
  • 2:请求已接受
  • 3:请求已处理
  • 4:请求已完成,且响应已就绪

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

html代码:

<body>
<script type="text/javascript">
    window.onload=function () {
        document.getElementById('btn').onclick=function () {
            var request;
            if(window.XMLHttpRequest){
                request=new XMLHttpRequest();
            }
            else{
                request=new ActiveXObject("Microsoft.XMLHttp");
            }
            request.open('get','test2.php');//建立连接
            request.onreadystatechange=function () {
                if(request.readyState==4&&request.status==200){
                    document.getElementById('text').innerHTML=request.responseText;//获取返回的字符串数据
                }
            }
            request.send();//发送请求
        };
    }
</script>
<input type="button" value="点击" id="btn">
<div id="text"></div>
</body>

php代码:

<?php 
echo "返回数据成功!";
 ?>

运行结果如下表示成功,当然这只是个简单的例子,关键在于使用readystate属性与onreadystatechange事件。

五、get请求与post请求

get请求:需要在open方法中添加参数传递。

post请求:需要在send方法中添加参数传递。

(1)get请求

使用get请求时,其实是将数据转化成字符串的形式进行传递的,例如index.html?name=tom&&age=18。由于字符串的长度是有限制的,所以get请求只能提交少量的数据。

html代码:

<body>
<script type="text/javascript">
    window.onload=function () {
        document.getElementById('btn1').onclick=function () {
            var req;
            var name=document.getElementById('username').value;
            name=encodeURIComponent(name);
            if(window.XMLHttpRequest){
                req=new XMLHttpRequest();
            }
            else {
                req=new ActiveXObject('Microsoft.XMLHttp');
            }
            req.open('get','test3.php?name='+name);
            req.onreadystatechange=function () {
                if(req.readyState==4&&req.status==200){
                    document.getElementById('text1').innerHTML=req.responseText;
                }
            }
            req.send(null)//习惯性在send中不传值时放入null
        }
    }
</script>
<div>
    <span>用户名:&nbsp;&nbsp;</span>
    <input type="text" id="username" placeholder="请输入用户名">
    <button id="btn1">提交</button>
    <div id="text1"></div>
</div>
</body>

php代码:

<?php 
$str=$_GET["name"];
echo "你的名字是".$str;
 ?>

注意:在这里相比之前多增加了一句话name=encodeURIComponent(name),如果不对name进行编码,在Chrome浏览器中没什么问题,但是使用IE浏览器会产生显示错误。

(2)post请求

使用post请求时,不再是以字符串的形式进行传递,而需要转化为xml格式进行传递。

如果页面上是form表单,设置method属性的值为post,会自动将数据转正xml格式。

如果没有使用form表单,必须设置setRequestHeader()f方法进行格式转换。

req2.open('post','test3.php');
req2.onreadystatechange=function () {
    if(req2.readyState==4&&req2.status==200){
        document.getElementById('text1').innerHTML=req2.responseText;
    }
}
req2.setRequestHeader("Content-Type","application/x-www-form-urlencoded" );
req2.send('name='+name);

相应的php中只要将$_GET改为$_POST即可。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值