你的位置:首页 > Java教程

[Java教程]jQuery跨域问题解决方法


跨域访问时web前端开发者经常遇到的问题,那么什么是跨域呢?

跨域的慨念:

只要协议,域名,端口任何一个不同,都被当作是不同的域。例如在A网站中,我们希望通过AJAX获得B网站中特定的内容,此时A网站和B位置不在同一个域,那么就出现了跨域访问问题。可以理解为两个域名之间不能跨国域名来发送请求或是请求数据,否则就是不安全的。

解决跨域访问的方法:

1.代理

2.在服务器端设置相应的响应头

3.JSONP

接下来,我详细的介绍一下jQuery中的JSONP是如何解决跨域访问的。

JSONP(Json with Padding)是资料格式Json的一种“使用模式”,可以让网页从别的网域获得资料。

JSONP也叫填充式JSON,是应用JSON的一种新方法,只不过是被包含在函数中调用的JSON。

JSONP的组成部分:

回调函数:当响应到来时应在网页调用的函数;

数据:传入回调函数中的JSON数据。

JSONP跨域访问原理:

利用<Script>标签,在网页上使用JS脚本文件,通过

原始的JS跨域访问:

后台有一个处理路径“/test”的函数:

//路径处理app.get("/test",user.test);//处理函数exports.test=function(req,res){  res.end("alert('JS跨域访问')");};

 外部有一个网页需要访问路径”/test“下的内容,则可以通过JS脚本文件来跨域访问:

//处理函数<script>  function method(data){    console.log(data);  }</script>//跨域访问<script src="http://localhost:3000/test"></script>

 结果会在当前的网页中弹出一个窗口:

jQuery中JSONP跨域访问的实现:

同样在后台有一个处理路径“/test”的函数:

//路径处理app.get("/test",user.test);//处理函数exports.test=function(req,res){ res.end("method("+JSON.stringify({mes:"跨域访问成功!"})+")");};

  外部有一个网页需要访问路径”/test“下的内容,通过JSONP来实现跨域访问:

//引入跨域访问中的jQuery函数库<script src="http://localhost:3000/js/jquery-1.9.1.min.js"></script>//jQuery中JSONP跨域访问<script>  $.ajax({    url:"http://localhost:3000/test",    type:"get",    success:function(data){      $("body").append(data.mes);    },    dataType:"jsonp",    jsonpCallback:"method"  });</script>

 结果会在当前的网页中显示如下信息:

通过上述代码我们可以看出JSOPN跨域访问和原始的JS跨域访问的不同之处是JSONP不需要写处理跨域访问的函数(例如上述方法中使用的method函数),在JSONP跨域访问时会自动帮我们创建处理跨域访问的函数。

JSONP跨域访问的优点:

1.它不像

2.它的兼容性更好,不需要

3.在请求完成后可以通过调用callback的方法传回结果。

JSONP跨域访问的缺点:

1.它只支持GET请求而不支持POST及其他类型的请求;

2.它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。