本文共 8561 字,大约阅读时间需要 28 分钟。
同步:
阻塞模式,在主线程排队执行的任务, 只有前一个任务执行完,后一个任务才能执行。alert(a);//报错,阻塞了后面任务的执行。 alert('hehe');for (; ;) { }//死循环,阻塞了后面任务的执行。console.log('hehe');
异步:
非阻塞模式,不进入主线程,而是进入任务队列, 只有等主线程上面的任务执行完毕,任务队列通知主线程, 请求执行任务。该任务才会进入主线程执行。 (定时器,ajax,回调函数)setTimeout(function () { //队列 alert(a); }, 0); alert('hehe');//主线程 console.log(1);//主线程 setTimeout(function () { //队列 console.log(2); }, 1000); setTimeout(function () { //队列 console.log(3); }, 2000); console.log(4);//主线程
xml:
注意:
1.创建ajax对象+容错处理
var ajax = new XMLHttpRequest();//标准浏览器 var ajax = new ActiveXObject(“microsoft.XMLHTTP”);//IE6 这里已经不需要了try{ console.log(a); }catch(e){ console.log(e);//打印try的错误! console.log('try出错时,我才执行') }finally{ alert("我是必须执行的!")//不管上面的代码是否有错误,我是必须执行的 };
var ajax=null; try{ ajax = new ActiveXObject("microsoft.XMLHTTP");//IE6 }catch(e){ ajax = new XMLHttpRequest();//标准浏览器 };
2.ajax对象下面的open()方法。
3.ajax对象下面send()方法,不涉及数据的传输,里面没有参数的。
发送解析 解析有五步:就绪状态码(数字)决定—ajax.readystate: 获取就绪状态码4监听事件:监听就绪码是否完成,一旦完成,立刻获取数据–onreadystatechange
ajax.responeText://获取接口放回数据。类型是字符串。ajax.onreadystatechange = function () { if (ajax.readyState === 4) { //请求响应全部完成,响应服务器的一切内容 if(ajax.status === 200){ //ajax.status:http状态码 200 ok console.log(ajax.responseText);//字符串 console.log(JSON.parse(ajax.responseText));//将json格式的字符串转化为对象 } } }
ajax获取数据共四步:
let ajax = new XMLHttpRequest(); ajax.open("get", "http://localhost/NZ-1903/0303/13conn.php", true); ajax.send(); ajax.onreadystatechange = function () { if (ajax.readyState === 4) { console.log(ajax.responseText);//字符串 console.log(JSON.parse(ajax.responseText));//将json格式的字符串转化为对象 } }
const goodslist = document.querySelector(".goodslist"); let ajax = new XMLHttpRequest(); ajax.open("get", "http://localhost/NZ-1903/0303/13conn.php", true); ajax.send(); ajax.onreadystatechange = function () { if (ajax.readyState === 4) { if(ajax.status === 200){ //ajax.status:http状态码 let renderarr = JSON.parse(ajax.responseText); let strhtml = "
${
value.title} 价格:${ value.price} 销量:${ value.sailnumber}-ajax获取任意类型的文件
(php文件/json格式的数据),xml文件,html文件,js文件1.获取json文件数据
let ajax = new XMLHttpRequest(); ajax.open("get","http://localhost/NZ-1903/0305/date.json",true); ajax.send(); ajax.onreadystatechange=function(){ if(ajax.readyState===4){ if(ajax.status===200){ console.log(ajax.responseText); console.log(JSON.parse(ajax.responseText));//json字符串转为对象 } else{ throw new Error("接口地址有误"+ajax.status); } } }
2.获取XML文件数据:弊端里面不仅数数据还有结构,没有json方便,各有各的优势(xml比json早出现)。
let ajax = new XMLHttpRequest(); ajax.open("get","http://localhost/NZ-1903/0305/date.xml",true); ajax.send(); ajax.onreadystatechange=function(){ if(ajax.readyState===4){ if(ajax.status===200){ console.log(ajax.responseXML); let xmldoc=ajax.responseXML; console.log(xmldoc.querySelector("xingming").innerHTML); console.log(xmldoc.querySelector("person").innerHTML); } else{ throw new Error("接口地址有误"+ajax.status); } } }
3.获取 html文件数据
let ajax = new XMLHttpRequest(); ajax.open("get","http://localhost/NZ-1903/0305/date.html",true); ajax.send(); ajax.onreadystatechange=function(){ if(ajax.readyState===4){ if(ajax.status===200){ console.log(ajax.responseText); } else{ throw new Error("接口地址有误"+ajax.status); } } }
4.获取js文件数据(一般采用script进行引入)
let ajax = new XMLHttpRequest(); ajax.open("get","http://localhost/NZ-1903/0305/date.js",true); ajax.send(); ajax.onreadystatechange=function(){ if(ajax.readyState===4){ if(ajax.status===200){ console.log(ajax.responseText); } else{ throw new Error("接口地址有误"+ajax.status); } } }
//传输数据--get,post //获取接口数据:接口的放回值,可以直接拼接(php,jsp,asp)。还有无需编译的普通页面,直接获取里面的数据(html,json); //1.get方式传输数据--地址栏后面通过?进行拼接,数据与数据之间通过&符号拼接。 //传入的值都是键值对的形式(key=value),后端通过键值对(key)获取,key自定义的的名称。 //传入格式:接口地址?key=value&key1=value1&key2=value2...... let ajax = new XMLHttpRequest(); //第一种 传入普通字符串 //ajax.open("get","http://localhost/NZ-1903/0305/getdate.php?name=zhangsan&age=100",true); //第二种 传入数组变量,普通的字符串变量... // let a = 1; // let b = 2; // let c= [1,2,3,4,5,6] // ajax.open("get", "http://localhost/NZ-1903/0305/getdate.php?num1=" + a + "&num2=" + b+"&num3=" + c, true); //第三种 传入对象。 let obj = { a: 6, b: 7, c: 8 }; // ajax.open("get", "http://localhost/NZ-1903/0305/getdate.php?date="+obj, true); // 传入的是date:[object Object] 有问题 // 要转换成a=1&b=2&c=3 ,才可以传给后端 //采用遍历拼接的方式来实现 function objtostring(obj) { if (Object.prototype.toString.call(obj).slice(8, -1) === "Object") { let arr = [] for (var atter in obj) { arr.push(atter + "=" + obj[atter]); } return arr.join("&"); } else { throw new Error("你输入的不是一个纯碎的对象"); } } ajax.open("get", "http://localhost/NZ-1903/0305/getdate.php?" + objtostring(obj), true); ajax.send(); ajax.onreadystatechange = function () { if (ajax.readyState === 4) { if (ajax.status === 200) { console.log(ajax.responseText); } } }
//传输数据--get,post //获取接口数据:接口的放回值,可以直接拼接(php,jsp,asp)。还有无需编译的普通页面,直接获取里面的数据(html,json); //1.post方式传输数据--ajax下面的send方法进行传输 + 请求头 //传入的值都是键值对的形式(key=value),后端通过键值对(key)获取,key自定义的的名称。 //传入格式:接口地址?key=value&key1=value1&key2=value2...... let ajax = new XMLHttpRequest(); let obj = { a: 600, b: 700, c: 800 }; function objtostring(obj) { if (Object.prototype.toString.call(obj).slice(8, -1) === "Object") { let arr = [] for (var atter in obj) { arr.push(atter + "=" + obj[atter]); } return arr.join("&"); } else { throw new Error("你输入的不是一个纯碎的对象"); } } ajax.open("post", "http://localhost/NZ-1903/0305/getdate.php", true); ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");//设置请求头。post传输必须要设置 //ajax.send("a=100&b=200&c=300"); //传输对象 ajax.send(objtostring(obj)); ajax.onreadystatechange = function () { if (ajax.readyState === 4) { if (ajax.status === 200) { console.log(ajax.responseText); } } }
转载地址:http://zgkgn.baihongyu.com/