11-ajax
Asynchronous JavaScript and XML(异步JavaScript和XML) 节省用户操作,时间,提高用户体验,减少数据请求 传输获取数据
var str="function show(){alert('abc');}"; eval(str); show()
–DOM创建元素
json
//IE6以上 /*var oAjax=new XMLHttpRequest(); alert(oAjax);*/ //IE6 /*var oAjax=new ActiveXObject("Microsoft.XMLHTTP"); alert(oAjax); */ //用一个不存在的变量:出错 //用一个不存在的属性:undefined //兼容写法 var oAjax=null; if(window.XMLHttpRequest) { oAjax=new XMLHttpRequest(); } else { oAjax=new ActiveXObject("Microsoft.XMLHTTP"); }
第二步:连接服务器
//open(方法, url, 是否异步) oAjax.open('GET', 'abc.txt', true);
第三步:发送请求
oAjax.send();
第四步:接收返回
//OnReadyStateChange oAjax.onreadystatechange=function () { if(oAjax.readyState==4) { if(oAjax.status==200) { alert('成功:'+oAjax.responseText); } else { alert('失败'); } }
status属性:服务器(请求资源)的状态 返回的内容
responseText:返回以文本形式存放的内容
responseXML:返回XML形式的内容
<script> document.getElementById("search").onclick = function() { var request = new XMLHttpRequest(); request.open("GET", "serverjson.php?number=" + document.getElementById("keyword").value); request.send(); request.onreadystatechange = function() { if (request.readyState===4) { if (request.status===200) { var data = JSON.parse(request.responseText); if (data.success) { document.getElementById("searchResult").innerHTML = data.msg; } else { document.getElementById("searchResult").innerHTML = "出现错误:" + data.msg; } } else { alert("发生错误:" + request.status); } } } } document.getElementById("save").onclick = function() { var request = new XMLHttpRequest(); request.open("POST", "serverjson.php"); var data = "name=" + document.getElementById("staffName").value + "&number=" + document.getElementById("staffNumber").value + "&sex=" + document.getElementById("staffSex").value + "&job=" + document.getElementById("staffJob").value; request.setRequestHeader("Content-type","application/x-www-form-urlencoded"); request.send(data); request.onreadystatechange = function() { if (request.readyState===4) { if (request.status===200) { var data = JSON.parse(request.responseText); if (data.success) { document.getElementById("createResult").innerHTML = data.msg; } else { document.getElementById("createResult").innerHTML = "出现错误:" + data.msg; } } else { alert("发生错误:" + request.status); } } } } </script>
function ajax(url, fnSucc, fnFaild) { //1.创建ajax对象 var oAjax=null; if(window.XMLHttpRequest) { oAjax=new XMLHttpRequest(); } else { oAjax=new ActiveXObject("Microsoft.XMLHTTP"); } //2.连接服务器 //open(方法, url, 是否异步) oAjax.open('GET', url, true); //3.发送请求 oAjax.send(); //4.接收返回 //OnReadyStateChange oAjax.onreadystatechange=function () { if(oAjax.readyState==4) { if(oAjax.status==200) { //alert('成功:'+oAjax.responseText); fnSucc(oAjax.responseText); } else { if(fnFaild) { fnFaild(); } } } }; }
7、 jQuery中的AJAX
1 <script> 2 $(document).ready(function(){ 3 $("#search").click(function(){ 4 $.ajax({ 5 type: "GET", 6 url: "http://127.0.0.1:8080/ajaxdemo/serverjson2.php?number=" + $("#keyword").val(), 7 dataType: "json", 8 success: function(data) { 9 if (data.success) { 10 $("#searchResult").html(data.msg); 11 } else { 12 $("#searchResult").html("出现错误:" + data.msg); 13 } 14 }, 15 error: function(jqXHR){ 16 alert("发生错误:" + jqXHR.status); 17 }, 18 }); 19 }); 20 21 $("#save").click(function(){ 22 $.ajax({ 23 type: "POST", 24 url: "serverjson.php", 25 data: { 26 name: $("#staffName").val(), 27 number: $("#staffNumber").val(), 28 sex: $("#staffSex").val(), 29 job: $("#staffJob").val() 30 }, 31 dataType: "json", 32 success: function(data){ 33 if (data.success) { 34 $("#createResult").html(data.msg); 35 } else { 36 $("#createResult").html("出现错误:" + data.msg); 37 } 38 }, 39 error: function(jqXHR){ 40 alert("发生错误:" + jqXHR.status); 41 }, 42 }); 43 }); 44 }); 45 </script>
栗子:百度下拉提示
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 #q {width: 300px; height: 30px; padding: 5px; border:1px solid #f90; font-size: 16px;} 8 #ul1 {border:1px solid #f90; width: 310px; margin: 0;padding: 0; display: none;} 9 li a { line-height: 30px; padding: 5px; text-decoration: none; color: black; display: block;} 10 li a:hover{ background: #f90; color: white; } 11 </style> 12 <script> 13 function baidu(data) { 14 var oUl = document.getElementById('ul1'); 15 var html = ''; 16 if (data.s.length) { 17 oUl.style.display = 'block'; 18 for (var i=0; i<data.s.length; i++) { 19 html += '<li><a target="_blank" href="http://www.baidu.com/s?wd='+data.s[i]+'">'+ data.s[i] +'</a></li>'; 20 } 21 oUl.innerHTML = html; 22 } else { 23 oUl.style.display = 'none'; 24 } 25 } 26 window.onload = function() { 27 var oQ = document.getElementById('q'); 28 var oUl = document.getElementById('ul1'); 29 oQ.onkeyup = function() { 30 if ( this.value != '' ) { 31 var oScript = document.createElement('script'); 32 oScript.src = 'http://suggestion.baidu.com/su?wd='+this.value+'&cb=baidu'; 33 document.body.appendChild(oScript); 34 } else { 35 oUl.style.display = 'none'; 36 } 37 } 38 } 39 </script> 40 </head> 41 42 <body> 43 <input type="text" id="q" /> 44 <ul id="ul1"></ul> 45 </body> 46 </html>
豆瓣
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 <style> 7 #q {width: 300px; height: 30px; padding: 5px; border:1px solid #f90; font-size: 16px;} 8 dl {border-bottom: 1px dotted #000;} 9 dt {font-weight: bold;} 10 </style> 11 <script> 12 function fn1(data) { 13 14 var oMsg = document.getElementById('msg'); 15 var oList = document.getElementById('list'); 16 17 console.log(data); 18 19 oMsg.innerHTML = data.title.$t + ' : ' + data['opensearch:totalResults'].$t; 20 21 var aEntry = data.entry; 22 var html = ''; 23 for (var i=0; i<aEntry.length; i++) { 24 25 html += '<dl><dt>'+ aEntry[i].title.$t +'</dt><dd><img src="'+ aEntry[i].link[2]['@href'] +'" /></dd></dl>'; 26 27 } 28 29 oList.innerHTML = html; 30 31 } 32 window.onload = function() { 33 34 var oQ = document.getElementById('q'); 35 var oBtn = document.getElementById('btn'); 36 var oMsg = document.getElementById('msg'); 37 var oList = document.getElementById('list'); 38 39 oBtn.onclick = function() { 40 41 if ( oQ.value != '' ) { 42 var oScript = document.createElement('script'); 43 oScript.src = 'http://api.douban.com/book/subjects?q='+oQ.value+'&alt=xd&callback=fn1'; 44 document.body.appendChild(oScript); 45 } 46 47 //http://api.douban.com/book/subjects?q='+oQ.value+'&alt=xd&callback=fn1&start-index=(当前页*每页显示的条数)&max-results=10(每页显示的条数) 48 49 } 50 51 } 52 </script> 53 </head> 54 55 <body>57 <input type="text" id="q" /><input type="button" id="btn" value="搜索" /> 58 <p id="msg"></p> 59 <hr /> 60 <div id="list"></div> 61 </body> 62 </html>
说明总结:
1.ajax和jsonp其实本质上是不同的东西。ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。
2.但是ajax和jsonp在数据传输的过程中都是可以用json格式的数据。
3.其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。
4.ajax和jsonp这两种技术在调用方式上“看起来”很像,目的也一样,都是请求一个url,然后把服务器返回的数据进行处理,因此jquery和ext等框架都把jsonp作为ajax的一种形式进行了封装;
总结Ajax基础
1. 什么是AJAX
2. 什么是服务器
3. 使用AJAX,读取服务器环境下的文件
4. 读取文件时注意编码一致
5. 运用AJAX读取服务器文件实例
6. 缓存及其影响
7. 用 new Date().getTime() 方式消除缓存的影响
8. 读取服务器文件中的数据全是字符串
9. eval() 方法
10. 用eval() 方法解析字符串
11. 文件的扩展名与AJAX的关系
12. 读取数组里的json
13. AJAX 分页实例,创建数据
14. 布局、ajax 读取、生成 li 元素,读取数据,预先清空数据
15. AJAX 原理、http请求:GET \ POST,两种方式的区别
Ajax中级
1. 编写 Ajax 库,AJAX 请求步骤
2. 创建 ajax 对象:XMLHttpRequest
3. 在 IE6 下兼容 XMLHttpRequest 的解决方案:ActiveXObject("Microsoft.XMLHTTP")
4. window属性与变量的关系
5. 用 window 属性来处理 IE6 的兼容性问题
6. 连接服务器:oAjax.open()
7. 同步与异步的区别
8. 发送请求:oAjax.send()
9. 接收返回:oAjax.onreadystatechange、readyState 属性、oAjax.status、oAjax.responseText
10. 封装 AJAX 函数