Ajax技术与跨域请求(jsonp)技术

Ajax技术

ajax:一种创建交互式网页应用的网页开发技术

特点:局部刷新

优点:异步模式,提高用户体验;优化了浏览器与服务器之间的数据传输,减少不必要的数据往返,减少带宽占用

封装Ajax函数及详细介绍:

//obj为一个对象,属性有type(数据请求方式get、post),url(后台处理地址),data对象(存放向数据库发送的信息),success函数(对返回的数据进行处理的函数)
function ajax(obj){
	//遍历boj对象中的data对象,进行字符串拼接
	var str = "";
	for(var attr in obj.data){
		if(obj.data){
			str += attr+"="+obj.data[attr]+"&";
		}
	}
	//去除最后一个&符号(字符串截取或正则字符串替换)
	//str = str.substring(0,str.length-1);
	str.replace(/&$/,"");
	//创建ajax对象
	if(window.XMLHttpRequest){
		var xhr = new XMLHttpRequest();
	}else{
		//IE6创建形式
		var xhr = new ActiveXObject('Microsoft.XMLHTTP');
	}
	//判断get和post方法,进行不同的数据传送
	if(obj.type.toUpperCase()=="GET"){
		if(obj.data){
			url = obj.url+"?"+str;
		}else{
			url = obj.url;
		}
		xhr.open("get",url,true);//true为异步处理
		xhr.send();
	}
	if(obj.type.toUpperCase()=="POST"){
		xhr.open("post",obj.url,true);
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr.send(str);
	}
	//服务器响应监听,做出响应
	xhr.onreadystatechange = function(){
		//xhr.readyState==4表示响应就绪   xhr.status==200表示请求成功
		if(xhr.readyState==4){
			if(xhr.status==200){
				obj.success(xhr.responseText);
			}else{
				alert("请重试");
			}
		}
	}
}
/*
 使用:ajax({
 	type:"post",
 	url:"text1.php",//请求数据处理并返回数据的后台地址
 	data:{"un"=username,"pw"=password},------un为name名,username为值
 	success:function(json){
 		//对返回的json数据的操作
 	}
 })
 * */

跨域请求(jsonp)技术

主要受浏览器安全机制:同源策略限制(协议、域名IP、端口号相同)

原理:利用script标签的src属性不受同源策略限制这一特点,访问非同源数据。(需要后台配合:回调函数);

举个获取百度搜索框搜索效果的例子:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		baidu<input type="text" id="txt">
		<ul id="list">
			
		</ul>
		<script type="text/javascript">
			var oTxt = document.getElementById("txt");
			var oList = document.getElementById("list");
			oTxt.oninput = function(){
//创建script标签并将其src地址设置为接口地址,更改其中数据传输部分信息来获取该域下的信息
				var oScript = document.createElement("script");
//wd后的值为向后台提供的数据;最终获取数据以回调函数aa的实参的形式被返回
				oScript.src = "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd="+oTxt.value+"&cb=aa";
				document.body.appendChild(oScript);
				document.body.removeChild(oScript);
			}
//定义aa函数对获得的数据data进行处理
			function aa(data){
//获取的数据为对象,需要的数据为属性名s,所以需要提取有用信息
				data = data.s;
				var str = "";
				data.forEach(function(item){
//将获取的数据以a标签形式插入li,并最终将所有li插入到ul列表中显示
					str += `<li><a href="https://www.baidu.com/s?wd=${item}">${item}</a></li>`;
				})
				oList.innerHTML = str;
				}
		</script>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_42758038/article/details/82558999
今日推荐