JavaScript 之 ajax
1. AJAX 的概念
AJAX,即 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
- 同步:前面的代码不执行完毕,后面的代码无法执行
- 异步:前面的代码不执行完毕,后面的代码也可正常执行
- 作用:在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页,实现异步无刷新
- 运用场景:表单验证,搜索框输入,论坛,博客等
2. XMLHttpRequest 对象
XMLHttpRequest 用于在后台与服务器交换数据
- 创建XMLHttpRequest 对象
var xmlhttp;
if(window.XMLHttpRequest){
//ie7以上、谷歌、火狐支持
xmlhttp = new XMLHttpRequest();
}else{
//老版本的ie5、6使用ActiveX
xmlhttp = new ActiveXObject();
}
- 向服务器发送请求
- open(请求类型get/post,发送地址,同步true/异步false)
- send(string仅用于post请求)
xmlhttp.open("get","01.txt",true);
xmlhttp.send();
- 当选择同步时,规定在响应处于 onreadystatechange(存储函数,当 readyState 属性改变时调用)事件中的就绪状态时执行的函数
- readyState 存有XMLHTTPRequest的状态
- 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
- status 存储
200: "OK"
404: 未找到页面
- readyState 存有XMLHTTPRequest的状态
- 当选择同步时,规定在响应处于 onreadystatechange(存储函数,当 readyState 属性改变时调用)事件中的就绪状态时执行的函数
xmlhttp.onreadystatechange=function(){
//表示响应已就绪
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
- 当选择异步时(不推荐,但可用于小型请求),无需编写 onreadystatechange 函数,把代码放到 send() 语句后面即可
注:JavaScript 会等到服务器响应就绪才继续执行。若服务器繁忙或缓慢,应用程序会挂起或停止。
- get 方式请求数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function(){
var btn = document.getElementById("btn");
btn.onclick = function(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","01.txt",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
}
}
</script>
注:get 方式发送的请求会有缓存现象,为避免这种情况,向url添加一个唯一的ID,如下:
//方法一
xmlhttp.open("get","01.txt?t=" + Math.random(),true);
//方法二
xmlhttp.open("get","01.txt?t=" + new Date().getTime(),true);
- post 方式请求数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function(){
var btn = document.getElementById("btn");
btn.onclick = function(){
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("post","02.php",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("box").innerHTML = xmlhttp.responseText;
}
}
}
}
</script>
注:如需像 HTML 表单那样 POST 数据,用 setRequestHeader(头名称,头的值) 添加 HTTP 头。如下:
xmlhttp.open("post","02.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
3. 服务器响应格式
- responseText 获得字符串形式的响应数据,返回字符串形式的响应
document.getElementById("box").innerHTML = xmlhttp.responseText;
- responseXML 获得 XML 形式的响应数据
<input type="button" id="btn" value="获取数据">
<div id="box"></div>
<script>
window.onload = function () {
var btn = document.getElementById("btn");
btn.onclick = function () {
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","03.xml?t=" + Math.random(),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var obj = xmlhttp.responseXML;
var arrs = obj.getElementsByTagName("title");
var str = "";
for(var i = 0;i < titles.length;i++){
str += arrs[i].innerHTML;
document.getElementById("box").innerHTML = str;
}
}
}
}
}
</script>
- JSON 格式
<input type="button" id="btn" value="获取数据">
<ul id="list"></ul>
<script>
window.onload = function () {
var btn = document.getElementById("btn");
btn.onclick = function () {
var xmlhttp;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}else{
xmlhttp = new ActiveXObject();
}
xmlhttp.open("get","04.json?t=" + Math.random(),true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
var res = JSON.parse(xmlhttp.responseText);
var arr = res.students;
for(var i = 0;i < arr.length;i++){
var li = document.createElement("li");
li.innerHTML = arr[i].name;
document.getElementById("list").appendChild(li);
}
}
}
}
}
</script>
4. Callback 函数
callback 函数是一种以参数形式传递给另一个函数的函数。
- 当存在多个 AJAX 任务时,则为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
function myFunction(){
loadXMLDoc("ajax_info.txt",function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById("box").innerHTML = xmlhttp.responseText;
}
});
}
JavaScript 之 ajax的更多相关文章
- 最新JavaScript、Ajax典藏级学习资料下载分类汇总 (2011年12月21日更新)
其他网站开发相关资料 超强HTML和xhtml,CSS精品学习资料下载汇总 最新htm ...
- 初识JavaScript,Ajax,jQuery,并比较三者关系
一.基本认识 1.JavaScript 定义: javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态 ...
- JavaScript实现Ajax小结
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<TCP的三次握手和四次挥手> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临 ...
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
- javascript版Ajax请求
什么是Ajax请求,Ajax也就是“Asynchronous JavaScript and XML”(异步JavaScript和XML),无刷新数据读取.能减少流量的消耗,也提高了浏览的流畅性,给用户 ...
- Javascript与Ajax
不使用jquery来处理ajax请求该怎么做? 首先要明确html中的某些数据需要从服务端获得,也就是客户端向服务端请求(request)数据,服务端就响应(response)这个请求,把客户端要的数 ...
- javascript进阶——Ajax
统的Web 页面和应用中,用户每点击页面上的某个部分,浏览器就会向服务器发出一个请求,等待服务器做出响应,然后返回一个完整新网页,但在大多数情况下用户不得不忍受页面闪烁和长时间的等待.随着Web技术的 ...
- Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)
英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...
- javascript实现ajax
什么是 ajax ajax 即“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),也就是无刷新数据读取. http 请求 首先需要了解 htt ...
- JavaScript和ajax 跨域的案例
今天突然想看下JavaScript和ajax 跨域问题,然后百度看了一下,写一个demo出来 <!DOCTYPE html> <html xmlns="http://www ...
随机推荐
- 1005. Spell It Right(20)—PAT 甲级
Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...
- 前端解析zip文件
使用jszip.js,read.js. 传入fileinput选中的文件对象 function handleFile(f) { JSZip.loadAsync(f) .then(function(zi ...
- jdbc之存储过程的调用和调用方法
调用存储过程 调用存储过程的sql语句 {call 过程名称(参数列表)} conn = DbUtils.getConnection(); sql = "{call p_order_appr ...
- usb驱动之打印usb设备信息(一)
1. 定义usb支持的设备类型: static const struct usb_device_id mouse_table[] = { { USB_INTERFACE_INFO(USB_INTERF ...
- ACM1021:Fibonacci Again
Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...
- postgresql 安装插件
最近由于工作需要,学习了citusdata 插件,在按照官方文档装好postgresql 之后,不能在psql 中正常启用其它插件 如 : "create extension pg_trg ...
- Tokio,Rust异步编程实践之路
缘起 在许多编程语言里,我们都非常乐于去研究在这个语言中所使用的异步网络编程的框架,比如说Python的 Gevent.asyncio,Nginx 和 OpenResty,Go 等,今年年初我开始接触 ...
- document ready
https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded https://github.com/addyosmani/j ...
- 20155204 2016-2017-2 《Java程序设计》第3周学习总结
20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...
- 20145234黄斐《Java程序设计》实验一—Java开发环境的熟悉(Linux + Eclipse)
实验步骤 由于实验时间比较紧张,这里只有最终结果的截图 (一)命令行下Java程序开发 (二)Eclipse下Java程序开发.调试 (三)练习 实现求正整数1-N之间所有质数的功能,并进行测试 实验 ...