zoukankan      html  css  js  c++  java
  • 20、promise与ajax jsonp

    一.Promise的作用是什么?

    当有多个请求之间有相互依赖关系(紧接着的请求需要上一次请求的返回结果),这时promise的作用就凸显出来了。

    二.如何使用promise?

                new  Promise(function(resolve,reject){
    				1.处理语句
    				if(处理成功){
    					resolve([参数]);
    				}else{
    					reject([参数]);
    				}
    			});
    

    三.promise的两个原型方法(对方方法) then(),catch()

    1.当前promise对象标志成resolve状态时,调用 then(function([参数]){处理语句})

    2.当前promise对象标志成reject状态时,调用catch(function([参数]){处理语句})

    四.Promise.all() : 静态方法

    当all中全部promise对象标志成resolve时,当前对象才返回resolve状态,否则,只有一个返回reject状态,当前对象返回reject状态

    //判断信息为true时,输出hello   false时,输出bye
    			function fn(msg){
    				//创建promise对象
    				let pm = new Promise(function(resolve,reject){ //resolve:表示成功的状态,reject:表示失败的状态
    					if(msg){
    						resolve(); //标志成功
    					}else{
    						reject(); //标志失败
    					}
    				});
    				return pm;
    			}
    			var p = fn(1);  //p接收的是调用函数后返回的promise对象
    			
    			p.then(function(){
    				alert('hello');
    			});
    			p.catch(function(){
    				alert('bye');
    			});
    

    加载一张图片

    			//创建一个数组,存放图片地址
    			const arrImgs = ['img/0.jpg','img/1.jpg','img/2.jpg'];
    			//加载图片
    			function loadImg(src){
    				return new Promise(function(resolve,reject){
    					//处理加载图片的过程
    					//Image   创建img对象
    					var img = new Image(); //document.createElement('img');
    					img.src = src;  //给img对象添加src属性
    					img.onload = function(){
    						resolve(this);
    					}
    					//错误事件
    					img.onerror = function(){
    						reject(new Error('图片加载失败!'));
    					}
    				});
    			}
    			var oP = loadImg(arrImgs[1]);
    			oP.then(function(img){
    				document.body.appendChild(img); //当浏览器加载图片成功后,将图片放到页面中。
    			}).catch(function(err){
    				console.log(err);
    			})
    

    解决ajax依赖导入的问题
    从内容中获取地址

                //获取页面元素
    			let oBtn = document.getElementById("btn");
    			let oDiv = document.getElementById("box");
    			oBtn.onclick = function(){
    				new Promise(function(resolve,reject){
    					ajax.get('1.txt',function(data){
    						resolve(data);
    					})
    				}).then(function(data){
    					return new Promise(function(resolve,reject){
    						ajax.get(data,function(str){
    							resolve(str);
    						})
    					})
    				}).then(function(data){
    					ajax.get(data,function(str){
    						oDiv.innerHTML = str;
    					})
    				})
    			}
    

    通过对象调用的方法对象方法;
    通过构造函数调用的方法静态方法. //Math  
    string.fromCharCode()

                //通过对象调用的方法,称为对象方法
    			//通过构造函数调用的方法,称为静态方法 Math     String.fromCharCode()
    			const arrImgs = ['img/0.jpg','img/1.jpg','img/2.jpg'];
    			function loadImg(src){
    				//创建Promise对象
    				return new Promise(function(resolve,reject){
    					let img = document.createElement('img');
    					img.src = src;
    					img.onload = function(){
    						resolve(this);
    					}
    					img.onerror = function(){
    						reject('图片加载失败!');
    					}
    				})
    			}
    			//Promise.all([]) :数组中返回的promise对象全部是resolve状态时,当前的promise对象都是resolve状态;只要有一个返回的是reject,当前的promise对象就是reject状态。
    			
    			let oP = Promise.all([loadImg(arrImgs[0]),loadImg(arrImgs[7]),loadImg(arrImgs[2])]);
    			oP.then(function(imgs){
    				imgs.forEach(function(value){
    					document.body.appendChild(value);
    				})
    			}).catch(function(str){
    				console.log(str);
    			})
    

    jsonp 掌握其思想

    src属性:具有跨域的特点

    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    	</head>
    	<body>
    		<input type="text" name="txt" id="txt" value="" />
    		<ul id='ul1'></ul>
    		<script type="text/javascript">
    			//src属性:具有跨域的特点
    			//https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=aaaa&cb=
    			let otxt = document.getElementById("txt");
    			let oUl = document.getElementById("ul1");
    			otxt.onkeyup = function(){
    				//创建script标签
    				let sc = document.createElement('script');
    				//设置src属性
    				sc.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=" + this.value + "&cb=fn";
    				document.getElementsByTagName('head')[0].appendChild(sc);
    			}
    			
    			
    			function fn(data){
    //				console.log(data);
    				var arr = data.s;
    				for(var i = 0,len = arr.length;i < len;i ++){
    					let li = document.createElement('li');
    					li.innerHTML = arr[i];
    					oUl.appendChild(li);
    				}
    			}
    		</script>
    	</body>
    </html>
    
  • 相关阅读:
    MySQL 8 新特性之Clone Plugin
    哈尔滨工业大学(威海)第九届ACM程序设计竞赛
    我回来了
    正则表达式(五):正则表达式的高阶使用
    正则表达式(四):正则表达式中的分组的概念
    正则表达式(三):正则表达式中的重复
    正则表达式(二):正则表达式的元字符
    正则表达式(一):正则表达式的概念
    Android NDK 跨平台构建工具 CMake 使用笔记
    字节序问题之大小端模式讲解
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/9275581.html
Copyright © 2011-2022 走看看