Javascript中的Ajax
来源:互联网 发布:ios蜂窝移动数据设置 编辑:程序博客网 时间:2024/05/29 08:59
Ajax是高性能Javascript的基础,它可以通过延迟下载体积较大的资源文件使得页面加载速度更快。他通过异步的方式在客户端和服务器端之间传输数据,从而避免页面资源一窝蜂的下载,选择适合的传输方式和最有效的数据格式,可以显著的改善用户和网站的交互体验。
建立连接的基本步骤:
1. 新建一个XMLHttpRequest对象;
2. 调用open接口,设置url,传输方式;
3. 调用 setRequestHeader(),设置头信息;
4. 调用send,开始发送;
5. 利用onreadystatechange监听请求返回的数据;
function myXMLRequest(url,type,params,callback){ var req=new XMLHttpRequest(); req.onreadystatechange=function(){ console.log(req.readyState); if(req.readyState===4){ var responseHeaders=req.getAllResponseHeaders(); var type=req.getResponseHeader('Content-Type'); var data; switch(type){ case 'text/xml': data=req.responseXML; break; case 'text/json': data=req.responseText; break; default: data=req.responseText; } callback(type,data); } } req.open(type,url+'?'+params.join('&'),true); req.send(null); //上面两句在post和get方式是不一样的,上面两句是get的方式,因为参数是放在url上的,若是post的方式, //则改为如下: //req.open(type,url,true); //req.send(params.join('&'));}
最后在callback里根据返回信息的类型处理信息就行啦。
下面是给出的完整代码,他可以向服务器获取指定传输格式(json或xml或html)的数据,并按相应格式解析,在前台生成表格。
//xhr.html<!doctype html><html> <head> <title>XHL test</title> <style type="text/css"> button{ font-size: 18px; padding: 10px; background-color: #ff00ff; border: none; outline: none; } #content{ margin-top: 20px; } td{ border: 1px solid #333333; padding: 10px; text-align: center; } </style> </head> <body> <button>click me</button> <div id="content"> </div> <script type="text/javascript"> document.getElementsByTagName('button')[0].onclick=function(){ console.log("clicked"); var url="xhrresponse.php"; var type='GET'; var params=[ 'type=json', 'name=mzz' ]; myXMLRequest(url,type,params,clickResponsed); } function myXMLRequest(url,type,params,callback){ var req=new XMLHttpRequest(); req.onreadystatechange=function(){ console.log(req.readyState); if(req.readyState===4){ var responseHeaders=req.getAllResponseHeaders(); var type=req.getResponseHeader('Content-Type'); var data; switch(type){ case 'text/xml': data=req.responseXML; break; case 'text/json': data=req.responseText; break; default: data=req.responseText; } callback(type,data); } } req.open(type,url+'?'+params.join('&'),true); req.send(null); } function clickResponsed(type,data){ var obj=document.getElementById('content'); var content="<h1>数据传输格式:<span>"+type+"</span></h1>"; switch(type){ case 'text/xml': content+=xmlParse(data); break; case 'text/json': content+=jsonParse(data); break; default: content+=data; } obj.innerHTML=content; } function jsonParse(jsondata){ var jsondata=eval(jsondata); var len=jsondata.length; var content="<table cellspacing='0'><thead><tr><td>id</td><td>name</td><td>realname</td><td>email</td></tr></thead><tbody>"; for (var i = 0; i<len; i++) { content+="<tr><td>"; content+=jsondata[i].id; content+="</td><td>"; content+=jsondata[i].username; content+="</td><td>"; content+=jsondata[i].realname; content+="</td><td>"; content+=jsondata[i].email; content+="</td></tr>"; }; content+="</tbody><table>" return content; } function xmlParse(xmldata){ var usersNode=xmldata.getElementsByTagName('user'); var len=usersNode.length; console.log(usersNode); var content="<table cellspacing='0'><thead><tr><td>id</td><td>name</td><td>realname</td><td>email</td></tr></thead><tbody>"; for (var i =0; i<len; i++) { content+="<tr><td>"; content+=usersNode[i].getAttribute('id'); content+="</td><td>"; content+=usersNode[i].getElementsByTagName('username')[0].childNodes[0].nodeValue; content+="</td><td>"; content+=usersNode[i].getElementsByTagName('realname')[0].childNodes[0].nodeValue; content+="</td><td>"; content+=usersNode[i].getElementsByTagName('email')[0].childNodes[0].nodeValue; content+="</td></tr>"; }; content+="</tbody><table>" return content; } </script> </body></html>
//xhrresponse.php<?php header('Content-Type:text/json'); $name=$_GET['name']; $type=$_GET['type']; switch ($type) { case 'json': $jsondata=array(); for ($i=0; $i <6 ; $i++) { $jsondata[$i] = array( 'id'=>$i, 'username' => "alice".$i, 'realname'=>'Alice Smith'.$i, 'email'=>'alice'.$i.'@alice.com' ); } echo json_encode($jsondata); break; case 'xml': echo "<?xml version='1.0' encoding='UTF-8'?>"; echo "<users total='6'><user id='1'><username>alice1</username><realname>Alice Smith1</realname><email>alice1@alice.com</email></user>"; echo "<user id='2'><username>alice2</username><realname>Alice Smith2</realname><email>alice2@alice.com</email></user>"; echo "<user id='3'><username>alice3</username><realname>Alice Smith3</realname><email>alice3@alice.com</email></user>"; echo "<user id='4'><username>alice4</username><realname>Alice Smith4</realname><email>alice4@alice.com</email></user>"; echo "<user id='5'><username>alice5</username><realname>Alice Smith5</realname><email>alice5@alice.com</email></user>"; echo "<user id='6'><username>alice6</username><realname>Alice Smith6</realname><email>alice6@alice.com</email></user>"; echo "</users>"; break; default: echo "hello".$name; break; } ?>
上面用XHR进行前后台数据交互很方便,提一下另一种向后台发数据更方便的方式-信标。
信标
在js中只需如下即可向后台发送数据
var params=[ 'type=json', 'name=mzz'];(new Image()).src="beacon.php?"+params.join('&');
信标很简单,也意味着做的事比较有限
1. 无法使用post
2. 发送的数据长度被限制的相当小
但是信标是向服务器回传输数据最快且最有效的方式。服务器不需要发送任何响应正文,因此你也无需担心客服端下载数据。
0 0
- AJAX 中的javascript部分
- AJAX中的JavaScript加强
- JavaScript中的Ajax
- javascript中的AJAX
- javascript中的AJAX
- Javascript中的Ajax
- Javascript中的ajax
- JavaScript中的Ajax
- javascript中的ajax
- JavaScript中的Ajax详解
- javascript中的AJAX和如何封装AJAX
- JavaScript和jQuery中的AJAX
- AJAX中的一个应用:javascript:void(0)
- 运行Ajax请求响应中的Javascript代码
- javascript中的ajax的作用域问题
- ASP.NET中的AJAX JavaScript实现
- javascript中的ajax对象(一)
- 【前端学习笔记】原生Javascript中的ajax
- Mysql取每小时的一条记录
- 程序员什么时候该考虑辞职
- Android温故之-Content Provider
- Eclipse+Tomcat开发支持热加载的配置方式
- 同样的错误不能犯两次(七):晚饭后就做
- Javascript中的Ajax
- Android 自定义弹窗
- idea 或 Android Studio 报错 Error:Could not run build action using Gradle installation
- 如何创建一个MVC项目
- Android API Guides---App Widgets
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- poj 2955 Brackets 区间dp
- LINUX VMWare-TOOLS的安装及使用
- 学习计划,订下此计划是为了督促自己不断学习。