AJAX
是指一種創建交互式網頁應用的網頁開發技術。
AJAX=異步JavaScript和XML(標準通用標記語言的子集)。
AJAX是一種用於創建快速動態網頁的技術。
AJAX是一種在無需重新加載整個網頁的情況下,能夠更新部份網頁的技術。
通過在後臺與服務器進行少量數據交換,AJAX可以使用網頁實現異步更新。這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新,也就是:按需更新。
AJAX解析純文本數據
<script>
$(document).ready(function() {
//獲取頁面中所有a元素中的第一個,並添加點擊事件
document.getElementByTagName('a')[0].onclick=function() {
//1、獲取XHR對象
var request = new XMLHttpRequest();
//2、配置AJAX請求參數:請求類型,請求的URL資源,請求方式,默認爲true,即異步
request.open('GET','URL',true);
request.open('GET',this.href+'?'+(new Date()),true);//每次請求都是最新數據
//3、將AJAX請求發送到服務器,GET請求不需要參數,可以傳空或null
request.send();
//4、AJAX對象的事件屬性onreadystatechange,不斷監聽服務器端的響應
request.onreadystatechange = function() {
//當請求狀態爲4,且響應碼爲200時,表示服務器響應成功,並返回了用戶數據
if (request.readyState == 4 && request.status == 200) {
//根據數據類型,更新當前頁面中的DOM節點信息
document.getElementByTagName('h3')[0].innerHTML=request.responseText;
}
};
return false;//取消a元素的默認點擊行爲
};
});
</script>
<body>
<a href=''></a>
<h3></h3>
</body>
AJAX訪問html文件
<script>
$(document).ready(function() {
//獲取頁面中所有a元素,並添加點擊事件
var aNodes = getElementByTagName('a');
//獲取當前頁面需要更新的DOM節點
var content = getElementById('content');
//給所有a元素添加點擊事件,每個鏈接都會訪問到一個不同的html文件
for (var i=0;i<aNodes.length;i++) {
aNodes[i].onclick = function {
//1、獲取XHR對象
var request = new XMLHttpRequest();
//2、配置AJAX請求參數:請求類型,請求的URL資源,請求方式,默認爲true,即異步
//request.open('GET','URL',true);
request.open('GET',this.href+'?'+(new Date()),true);//每次請求都是最新數據
//3、將AJAX請求發送到服務器,GET請求不需要參數,可以傳空或null
request.send();
//4、AJAX對象的事件屬性onreadystatechange,不斷監聽服務器端的響應
request.onreadystatechange = function() {
//當請求狀態爲4,且響應碼爲200時,表示服務器響應成功,並返回了用戶數據
if (request.readyState == 4 && request.status == 200) {
//根據數據類型,更新當前頁面中的DOM節點信息
document.getElementByTagName('h3')[0].innerHTML=request.responseText;
}
return false;//取消a元素的默認點擊行爲
}
};
});
</script>
<body>
<a href='1.html'></a>
<a href='2.html'></a>
<a href='3.html'></a>
<div id='content'></div>
</body>
AJAX訪問XML格式數據
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AJAX---xml</title>
<script src="jQuery/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//獲取頁面中所有a元素中的第一個,並添加點擊事件
document.getElementsByTagName('a')[0].onclick=function() {
//1、獲取XHR對象
var request = new XMLHttpRequest();
//2、配置AJAX請求參數:請求類型,請求的URL資源,請求方式,默認爲true,即異步
// request.open('GET','URL',true);
request.open('GET',this.href+'?='+(new Date()),true);//每次請求都是最新數據
//3、將AJAX請求發送到服務器,GET請求不需要參數,可以傳空或null
request.send();
//4、AJAX對象的事件屬性onreadystatechange,不斷監聽服務器端的響應
request.onreadystatechange = function() {
//當請求狀態爲4,且響應碼爲200時,表示服務器響應成功,並返回了用戶數據
if (request.readyState == 4 && request.status == 200) {
var result = request.responseXML;
//解析當前XML文件中的每個節點數據,保存到對應變量中,XML支持所有DOM操作
var name = result.getElementsByTagName('name')[0].childNodes[0].nodeValue;
var age = result.getElementsByTagName('age')[0].childNodes[0].nodeValue;
var job = result.getElementsByTagName('job')[0].childNodes[0].nodeValue;
//根據數據類型,更新當前頁面中的DOM節點信息
document.getElementById('name').innerHTML=name;
document.getElementById('age').innerHTML=age;
document.getElementById('job').innerHTML=job;
}
};
return false;//取消a元素的默認點擊行爲
};
});
</script>
</head>
<body>
<a href="1.xml">我的信息</a>
<div>
<p id='name'></p>
<p id='age'></p>
<p id='job'></p>
</div>
</body>
</html>
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<info>
<name>Zhang</name>
<age>28</age>
<job>php</job>
</info>
AJAX訪問JSON格式數據
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON</title>
<script src="jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(document).ready(function() {
document.getElementById('btn').onclick = function(event) {
//第一種
var data = {
'name':'zhang',
'age':'28',
'hobby':['跑步','睡覺'],
'job':{
'php':'Mysql',
'html':'jQuery'
}
};
//第二種
var json = '{\
"name":"zhang",\
"age":"28",\
"hobby":["跑步","睡覺"],\
"job":{\
"php":"Mysql",\
"html":"jQuery",\
}\
}';
var data = eval('('+json+')');
document.getElementById('name').innerHTML=data.name;
document.getElementById('age').innerHTML=data.age;
document.getElementById('hobby').innerHTML=data.hobby[1];
document.getElementById('job').innerHTML=data.job.php;
//第三種
var request = new XMLHttpRequest;
request.open('GET','demo.json',true);
request.send(null);
request.onreadystatechange = function() {
if (request.readyState==4 && request.status==200) {
var data = JSON.parse(request.responseText);
document.getElementById('name').innerHTML=data.name;
document.getElementById('age').innerHTML=data.age;
document.getElementById('hobby').innerHTML=data.hobby[1];
document.getElementById('job').innerHTML=data.job.php;
}
}
}
});
</script>
</head>
<body>
<button type="button" name="button" id="btn">我的信息</button>
<p id="name"></p>
<p id="age"></p>
<p id="hobby"></p>
<p id="job"></p>
</body>
</html>
AJAX訪問中的$.ajax()函數
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.ajax()</title>
<script src="jQuery/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
$('#btn').click(function() {
$.ajax({
type:'GET',//http的請求方法
url:'demo.json',//要獲取數據的URL
data:null,//不給URL添加任何數據
dataType:'json',//將獲取到的數據當作JSON類型處理
success:function(data) {//完成時調用
$('#name').text(data.name);
$('#age').text(data.age);
$('#hobby').text(data.hobby[1]);
$('#job').text(data.job.php);
},
error:function(data) {//失敗時調用
alert('獲取失敗!');
}
});
});
});
</script>
</head>
<body>
<button type="button" name="button" id="btn">我的信息</button>
<p id="name"></p>
<p id="age"></p>
<p id="hobby"></p>
<p id="job"></p>
</body>
</html>
AJAX訪問中的load()方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>get</title>
<script src="jQuery/jquery-1.8.3.min.js"></script>
<script type='text/javascript'>
$(function() {
$('button').click(function() {
//1、獲取純文本文件的內容
$('div').load('hello.txt');
//2、獲取html文件的內容,可以使用jquery選擇器,按需獲取
$('div').load('hello.html');//獲取html文件全部內容
$('div').load('hello.html li:first','?'+(new Date()));//獲取第一個li的內容
$('div').load('hello.html li:eq(2)');/獲取索引爲2的li內容
$('div').load('hello.html li:odd','?'+(new Date()));//獲取全部li中索引爲奇數的內容
//3、獲取XML中的數據,與訪問HTML一樣,也可以使用選擇器
$('div').load('1.xml');//返回xml,全部同行顯示
$('div').load('1.xml work');//顯示指定標籤名的數據
$('div').load('1.xml work',function() {
$(this).css('color','red');
});//可以使用回調函數
//4、獲取JSON數據,json不能直接使用,必須通過回調函數來進行解析後再使用
$('div').load('demo.json',function(data) {
//將獲取到的json字符串解析爲js對象
var jsonObj = JSON.parse(data);
$(this).empty()
$(this).append('<p>姓名:<span>'+jsonObj.name"'</span></p>')
});
});
});
</script>
</head>
<body>
<button type="button" name="button">測試</button>
<div id="con"></div>
</body>
</html>
AJAX訪問中的$.get()方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>get</title>
<script src="jQuery/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
$('button').click(function(event) {
//1、從服務器中返回純文本或html
$.get('1.php',function(data) {
$('#con').html(data);
});
//2、服務器返回XML格式數據
$.get('1.php',function(data) {
//將XML數據轉爲jQuery對象,並獲取內部的數據
var name = $(data).children('name').text();
//將解析出的數據拼接成需要顯示的html代碼
var html = '<p>'+name+'</p>';
//將html代碼插入到指定節點
$('#con').html(html);
});
//3、服務器返回JSON格式數據
$.get('1.php',function(data) {
var jsonObj = JSON.parse(data);//返回一個JSON格式字符串,需要先解析成JS對象
$('#con').empty().append('<p>姓名:'+jsonObj.name+'</p>');
});
});
});
</script>
</head>
<body>
<button type="button" name="button">測試</button>
<div id="con"></div>
</body>
</html>
1.php:
<?php
echo 'hello world!';//純文本
//XML格式數據
echo <<<'XML'
<?xml version="1.0" encoding="UTF-8" ?>
<info>
<name>Zhang</name>
<age>28</age>
<job>php</job>
</info>
XML;
//JSON格式數據
echo '{"name":"zhang","age":"28","hobby":["跑步","睡覺"],"job":{"php":"Mysql","html":"jQuery"}}';
?>
AJAX中的$.getJSON()函數
<script>
$.getJson('1.php',function(data) {
$('#con').empty().append('<p>姓名:'+data.name+'</p>');
});
</script>
AJAX中的$.post()方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>post</title>
<script src="jQuery/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
$('#name').change(function(event) {
$.post(
'check.php',
{
'name':$(this).val()
},
function(data) {
console.log(data);
$('#name').next().empty();
$('#name').after(data);
}
);
});
$('#sub').click(function(event) {
var name = $('#name').val();
if ('' == name && null == name) {
$('#name').after('<span>用戶名不能爲空</span>');
return false;
}
});
});
</script>
</head>
<body>
<form action="" method="post">
姓名:<input type="text" name="name" value='' id='name'><br/>
密碼:<input type="password" name="password" value="" id='ps'><br>
<input type="submit" name="" value='提交' id='sub'>
<input type="reset" name="">
</form>
</body>
</html>
check.php
<?php
$info = $_POST;
$name = isset($info['name']) ? $info['name'] : '';
$arr_name = ['zhang','li'];
if (!empty($name) && in_array($name, $arr_name)) {
echo '<script>alert("名稱已存在");window.history.back(-1);</script>';
} elseif (empty($name)) {
echo '<script>alert("不可爲空");window.history.back(-1);</script>';
} else {
echo '<span style="color:blue">名稱可用</span>';
}
?>