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();会出现下面的错误:不能跨域请求

然而,

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

<script>
	 var result=false;
		function check(){
			if(resultform()){
				return true;
			}
			else{
				return false;
			}
		}
     function checkform(){
            var usernameobj=document.getElementById(‘username‘).value;
            var usernumobj=document.getElementById(‘usernum‘).value;
            var data={username:usernameobj,usernum:usernumobj};
	    var jsonobj=JSON.stringify(data);   
             url=‘http://127.0.0.1/ajax/json/test.php?data=‘+jsonobj+"&r="+Math.random()+"&callbackname=jp";         
            /动态添加script标签
	   var scripttag=document.createElement("script");
            scripttag.setAttribute("src",url);
            document.body.appendChild(scripttag);
   
        
}
    //客户端回调函数
       var jp=function(data){
              var tips=document.getElementById(‘tips‘);
              if(data[‘username‘]=="11"){
		 tips.innerHTML="<h1>你输入的名字是:"+data[‘username‘]+"</h1>";
		   result=true;
	        }
              else{
		   tips.innerHTML="<h1>你输入的有误</h1>";
			result=false;
			    }

              resultform();
               
			}
                       
function resultform(){
	if(result){
		return true;
	}
	else{
		alert("您输入的有误");
		return false;
	}
}
	</script>
php页面代码:
<?php
$data = json_decode($_GET[‘data‘],true);
$callbackname=$_GET[‘callbackname‘];
 echo $callbackname  ."(".json_encode($data).")" ;
 ?>

效果图:

时间: 2024-11-10 07:54:24

ajax小demo---JSONP 跨域原理及简单应用的相关文章

jsonp 跨域原理详解

JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进行多iframe或多窗口编程.以及Ajax编程时显得尤为重要.根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在

深入剖析jsonp跨域原理

在项目中遇到一个jsonp跨域的问题,于是仔细的研究了一番jsonp跨域的原理.搞明白了一些以前不是很懂的地方,比如: 1)为什么jsonp跨域只能是get请求,而不能是post请求: 2)jsonp跨域的原理到底是什么魔法: 3)除了jsonp跨域之外还有那些方法绕过“同源策略”,实现跨域访问: 4)jsonp和ajax,或者说jsonp和XMLHttpRequest是什么关系: 等等. 1.同源策略 说到跨域,首先要明白“同源策略”.同源是指:js脚本只能访问或者请求相同协议,相同domai

jsonp跨域原理解析

前言: 跨域请求是前台开发中经常遇到的场景,但是由于浏览器同源策略,导致A域下普通的http请求没法加载B域下的数据,跨域问题由此产生.但是通过script标签的方式却可以加载非同域下的js,因此可以利用这一特性,进行跨域数据请求. 先看一下跨域导致的问题,测试域分别为 localhost 和 www.icity366.com, 下文分别对应A域和B域,测试文件为A域下的 data.jsp, 我们在A(localhost)域下请求B(www.icity366.com)域下的数据,看一下data.

jsonp跨域原理

<!DOCTYPE html><html lang="en"> <head> <meta charset="utf-8"> </head> <body> <input type="button" value="点击请求"> <script src="jquery.min.js"></script> &

javascript实现jsonp跨域问题+原理

在工作中往往存在跨域的问题 ,跨域是什么概念就不在这里了,搜这类问题的肯定已经知道了.下面直接探讨jsonp跨域原理 jspon跨域原理: 1.动态创建一个script标签 var script = document.createElement("script"); 2.添加src属性,value也就是所谓的接口的写入(注:此处要返回的是一个回调函数callback:这里可以省略callback字段写成 script.src = "http://xxxx.com/?user=

JSONP跨域请求数据报错 “Unexpected token :”的解决办法

原文  http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Unexpected token :”,主要问题在于返回的数据格式不正确 本地虚拟两个域名,分别为:www.test.com.www.abc.com http://www.test.com/index.html页面点击按钮,请求返回 www.abc.com域名目录下的文件的数据 ,其代码为: <!DOCT

原生JS封装Ajax插件(同域&amp;&amp;jsonp跨域)

抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正确的地方,还望指正^_^ 一.Ajax核心,创建XHR对象 Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一款引入XHR对象的浏览器,而IE5中的XHR对象是通过MSXML库中的一个ActiveX对象实现的,因此在IE中可能有3个版本,即MSXML2.XMLHttp.

.net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.WebForm使用母版页进行登录时候的验证 //新建一个页面父类 public abstract class BasePage:Page { protected void Page_Load(object sender, EventArgs e) { //1.身份验证的方法 Session if (Se

JSONP跨域的原理解析

JSONP跨域的原理解析 一种脚本注入行为 在 2011年10月27日 那天写的     已经有 99238 次阅读了 感谢 参考或原文 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略).这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容. JavaScript这个安全策略在进