Ajax

20 篇文章 0 订阅
1 篇文章 0 订阅

异步的JavaScript和XML

Ajax对象的创建

实现程序:

var oBtn = document.getElementById('bt');
oBtn.noclick = function(){
    var xhr = new XMLHttpRequest();
    xhr.open('get','1.txt',true);
    xhr.send();

    xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        alert(xhr.responseText);
    }
 }

浏览器兼容ajax对象

在ie6中不支持XMLHttpRequest对象的使用,所以考虑兼容问题

方法一:判断是否支持Ajax对象

方法一:判断是否支持Ajax对象而你采取不同方式
var oBtn = document.getElementById('bt');
oBtn.noclick = function(){
/*
1.创建一个Ajax对象
    ie6以下new ActiveXObject('Microsoft.XMLHTTP');
*/
    var xhr = null;
    if(window.XMLHttpRequest){//判断是否支持Ajax对象
        xhr = new XMLHttpRequest();
    }else{
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    xhr.open('get','1.txt',true);
    xhr.send();

    xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        alert(xhr.responseText);
    }
 }

方法二:采取异常机制try catch

var oBtn = document.getElementById('bt');
oBtn.noclick = function(){
/*
1.创建一个Ajax对象
    ie6以下new ActiveXObject('Microsoft.XMLHTTP');
*/
    var xhr = null;
    try{
        xhr = new XMLHttpRequest();
    }catch(e){
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    xhr.open('get','1.txt',true);
    xhr.send();

    xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        alert(xhr.responseText);
    }
 }

open()方法和表单

表单

表单:数据的提交
    action : 数据提交的地址,默认是当前页面
    method : 数据提交的方式,默认是get方式
        1.get
            把数据名称和数据值用=号连接。多个数据用&串联。数据是显示传送到后台的
            url长度限制的原因,我们不要通过get方式传递过长的数据
        2.post
            理论上长度无限制,可以修改。
    enctype:数据提交的格式,默认格式为applicatiom/x-www-form-urlencoded

代码:
<body>
    <form action="1.get.php" method="get">
        <input  type="text" name="username"/>
        <input type="submit" value="提交" />
    </form>
</body>

open( )

open(para1,para2,para3)
para1:发送方式
para2:请求资源文件
para3:同步和异步模式
同步:阻塞模式
异步:非阻塞模式

等待服务器返回

请求状态监控

readyState : ajax工作状态
responseText: ajax请求返回的内容
readystatechange:对于服务器状态的监听,当readyState状态只发生改变是触发
**容错处理**
XMLHttpRequst.status:服务器状态,http状态码,比如404102等等

xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        if(xhr.status == 200){//容错处理
            alert(xhr.responseText);
        }else{
            alert("出错了");
        }
    }
}

数据的传递JSON

客户端:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax_demo1</title>
</head>
<body>

<input id="Bt" type="button" value="按钮" />
<ul id="ul1"></ul>


<script type="text/javascript">
    window.onload = function(){

        var oBtn = document.getElementById('Bt');
        oBtn.onclick = function(){

            var  xhr = null;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else{
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }

            xhr.open('get','getNews.php',true);
            xhr.send();

            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.status == 200){
                        //alert(xhr.responseText);
                        //接受JSON数据并处理
                        var data = JSON.parse(xhr.responseText);
                        var oUl = document.getElementById('ul1');
                        var html = '';

                        for (var i=0; i<data.length; i++) {
                            html +='<li><a href="#">'+data[i].title+'</a>[<span>'+data[i].date+'</span>]</li>';
                        }
                        oUl.innerHTML = html;
                    }else{
                        alert("出错了ERR" + xhr.status);
                    }

                }
            }
        }
    }

</script>   
</body>
</html>


注意:ie7及以下的IE浏览器不支持JSON对象,需要到官网下载文件以便是ie7以下的浏览器支持JSON对象。

服务器端:
这里写代码<?php
header('content-type:text/html;charset="utf-8"');
error_reporting(0);

$news = array(
    array('title'=>'上海10月8日起调整出租车运价 起租价调为','date'=>'2014'),
    array('title'=>'德国收紧巴尔干难民法律 加强边境管制','date'=>'2015'),
    array('title'=>'中国逮捕两名日本间谍嫌疑人 或判死刑','date'=>'2014'),
    array('title'=>'泪目!学生时代最后悔没做的22件事','date'=>'2014'),
    array('title'=>'庞贝古城木乃伊接受CT扫描 死前惊恐表情曝光','date'=>'2014'),
    array('title'=>'南京虐童案养母被判刑6个月(图)','date'=>'2014'),


);
echo json_encode($news);//以JSON对象返回

以下代码运行成功,实现每秒自动刷新数据显示

json.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax_demo1</title>
    <script src="./ajax.js" type="text/javascript"></script>
</head>
<body>

<input id="Bt" type="button" value="按钮" />
<ul id="ul1"></ul>


<script type="text/javascript">
    window.onload = function(){

        var oBtn = document.getElementById('Bt');
        oBtn.onclick = function(){

            ajax('get','getNews.php','',function(data){
                    var data = JSON.parse(data);
                    var oUl = document.getElementById('ul1');
                    var html = '';

                    for (var i=0; i<data.length; i++) {
                        html +='<li><a href="#">'+data[i].title+'</a>[<span>'+data[i].date+'</span>]</li>';
                    }
                    oUl.innerHTML = html;
            });

            setInterval(function(){
                ajax('get','getNews.php','',function(data){
                        var data = JSON.parse(data);
                        var oUl = document.getElementById('ul1');
                        var html = '';

                        for (var i=0; i<data.length; i++) {
                            html +='<li><a href="#">'+data[i].title+'</a>[<span>'+data[i].date+'</span>]</li>';
                        }
                        oUl.innerHTML = html;
                    });

            },1000)
        }
    }

</script>   
</body>
</html>

ajax.js


function ajax(method, url, data, success){

    var  xhr = null;
    //浏览器是否支持XMLHttpRequest对象
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else{
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }
//请求方式的不同,传参方式的不同
            if(method == 'get' && data){
                url += '?' + data;
            }

            xhr.open(method,url,true);
            if(method == 'get'){
                xhr.send();

            }else{
                xhr.setRequestHeader('content-type','applicatiom/x-www-form-urlencoded');
                xhr.send(data);
            }

            xhr.onreadystatechange = function(){
                if(xhr.readyState == 4){
                    if(xhr.status == 200){
                        //判断是否传入函数,并执行回调success函数
                        success && success(xhr.responseText);
                    }else{
                        alert("出错了ERR" + xhr.status);
                    }

                }
            }
}


getNews.php


<?php
header('content-type:text/html;charset="utf-8"');
error_reporting(0);

$news = array(
    array('title'=>' 起租价调为df ','date'=>'2014'),
    array('title'=>'德国收紧巴尔干难民法律 加强边境管制','date'=>'2015'),
    array('title'=>'中国逮捕两名日本间谍嫌疑人 或判死刑','date'=>'2014'),
    array('title'=>'泪目!最后悔没做的22件事','date'=>'2014'),
    array('title'=>'庞贝古城木乃伊接受CT扫描 死前惊恐表情曝光','date'=>'2014'),
    array('title'=>'南京虐童案养母被判刑6个月(图)','date'=>'2014'),


);
echo json_encode($news);//以JSON对象返回
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值