ajax小demo---JSONP 跨域原理及简单应用

前端之家收集整理的这篇文章主要介绍了ajax小demo---JSONP 跨域原理及简单应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一.jsonp

Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。

因为同源策略,(它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。)我们不能从不同的域(网站)访问数据,而jsonp就是用来实现这种不能跨域请求数据。

二.jsonp原理:

在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但img、iframe、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。然而,JSONP就是通过script节点src属性来实现调用跨域的请求。通过动态的创建script标签当我们通过JSONP模式请求跨域资源时,服务器返回给客户端一段javascript代码,这段javascript代码自动调用客户端回调函数

三.实例

当使用ajax本地调用url='http://127.0.0.1/ajax/json/test.php?data='+jsonobj+"&r="+Math.random();会出现下面的错误:不能跨域请求

wKioL1cnKOPhEyL2AACekYRLi0M855.jpg

然而,

使用jsonp就可以解决这个问题:具体代码如下:

<script>
	varresult=false;	
		functioncheck(){
			if(resultform()){
				returntrue;
			}
			else{
				returnfalse;
			}
		}
functioncheckform(){
varusernameobj=document.getElementById('username').value;
varusernumobj=document.getElementById('usernum').value;
vardata={username:usernameobj,usernum:usernumobj};
	varjsonobj=JSON.stringify(data);
url='http://127.0.0.1/ajax/json/test.PHP?data='+jsonobj+"&r="+Math.random()+"&callbackname=jp";
//动态添加script标签
	varscripttag=document.createElement("script");
scripttag.setAttribute("src",url);
document.body.appendChild(scripttag);


}
//客户端回调函数
varjp=function(data){
vartips=document.getElementById('tips');
if(data['username']=="11"){
		tips.innerHTML="<h1>你输入的名字是:"+data['username']+"</h1>";
		result=true;
	}
else{
		tips.innerHTML="<h1>你输入的有误</h1>";
			result=false;
			}

resultform();

			}

functionresultform(){
	if(result){
		returntrue;
	}
	else{
		alert("您输入的有误");
		returnfalse;
	}
}
	</script>
PHP页面代码:
<?PHP
$data=json_decode($_GET['data'],true);
$callbackname=$_GET['callbackname'];
echo$callbackname."(".json_encode($data).")";
?>

效果图:

wKioL1cnK1ywa1muAACt0YidnvM032.jpg

原文链接:https://www.f2er.com/ajax/162226.html

猜你在找的Ajax相关文章