原生Ajax实现页面局部更新功能


Ajax:Asynchronous Javascript And XML(异步 JavaScript 和 XML)

同步:必须等前面的任务完成,才可以继续后面的任务。
异步:不受当前任务影响

使用Ajax发送请求:
1.创建异步(XMLHttpRequest)对象
2.准备发送
3.执行发送动作
4.执行回调函数

分开来一步步看:

一、原生Ajax

1.创建异步(XMLHttpRequest)对象

var xhr = null;
if (window.XMLHttpRequest) {
     xhr = new XMLHttpRequest();       //标准创建XMLHttpReques对象
} else {
     xhr = new ActiveXObject('Microsoft.XMLHTTP');    //IE6,兼容处理
}

2.准备发送

三个参数:open(请求方式请求地址同步或异步标志符
默认是true,异步。false,同步。
get请求:

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

post请求:

xhr.open('post', 'get.php', true);      
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");    //如果想要使用post提交数据,必须添加此行

如果是get请求,那么请求参数必须在url中传递。get要注意,IE中要用encodeURI()对中文编码,防止乱码。

例如:

var param = 'username' + uname + '&password' + pwd;
xhr.open = ('get','get.php?' + encodeURI(param), true);

3.执行发送动作

get请求需添加null参数

 xhr.send(null);

post请求参数在这传递,且不需要转码

 xhr.send(param);

4.执行回调函数

xhr.onreadystatechange = function () {
	if (xhr.readyState == 4) {       //表示服务器端数据回来了
		if (xhr.status == 200)  {     //表示数据正常
			var data = xhr.responseText;          //获取后台的字符串
            var obj = JSON.parse(data);         //json字符串转为对象
            var tag = '<div><span>' + obj.name + '</span><span>-------</span><span>' + obj.age + '</span></div>';
            var info = document.getElementById('info');
            info.innerHTML = tag;
            console.log(2);
		}
	}
}

补充:

readyState=0,表示xhr创建完成
readyState=1,表示已经发送了请求,调用了xhr.send()
readyState=2,表示浏览器已收到服务器响应的数据
readyState=3,正在解析数据
readyState=4,数据已解析完成,可以使用(但不一定正常)

xhr.status==200,表示数据正常
常见的http状态码:200 响应成功
                               404 没找到请求资源
                               403 服务器得到请求,但拒绝执行
                               401 请求需用户验证
                               500 服务端错误
                               … …

附一个总的demo

ajax.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="info"></div>
    <input type="button" id="btn" value="获取json">
</body>

<script type="text/javascript">
    window.onload = function () {
        var btn = document.getElementById('btn');
        btn.onclick = function () {
            var xhr = null;
            if (window.XMLHttpRequest) {
                xhr = new XMLHttpRequest();
            } else {
                xhr = new ActiveXObject('Microsoft.XMLHTTP');
            }
            xhr.open('get', 'get.php', true);
            xhr.send(null);
            console.log(1);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        var data = xhr.responseText;          //获取后台的字符串
                        var obj = JSON.parse(data);         //json字符串转为对象
                        var tag = '<div><span>' + obj.name + '</span><span>-------</span><span>' + obj.age + '</span></div>';
                        var info = document.getElementById('info');
                        info.innerHTML = tag;
                        console.log(2);
                    }
                }
            }
            console.log(3);             // 1 3 2回调函数最后 异步的效果
        }
    }
</script>
</html>

get.php

<?php
    header("Content-Type:text/html;charset=utf-8");
    //json字符串,注意是字符串=>   '括起json'
     //$arr = '{"name":"ch", "age":"22"}';
     //echo $arr;
     
    //数组
    $arr = array("name"=>"ch", "age"=>"22");
    echo json_encode($arr);
?>

附图:
在这里插入图片描述

在这里插入图片描述
控制台
在这里插入图片描述

二、jQuery实现Ajax请求

$(function(){
	$('#btn').click(function(){
		//获取数据
		var username = $('#username');	
		var pwd = $('#password');
		//调用$.ajax()发送ajax请求数据
		$.ajax({
			type: 'get',
			url: './11.php',
			data: {
				uname: username,
				pwd: password,
			},
			dataType: 'json',
			success: function(data){
				//成功回调
			},
			error: function(data){
				//失败回调
			}
		})
	})
})

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值