当前位置: 首页 >服务端 > Ajax跨越请求失败,解决

Ajax跨越请求失败,解决

跨越请求

1.1什么是跨域(两个不同系统之间的访问、调用)

1)域名不同,即两个不同的应用。

Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

2)域名相同,但是端口不同,即同一个应用中的不同子系统。

Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

1.2 Ajax跨域请求的缺陷

1)创建testJsonp.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" src="/js/jquery-1.6.4.js"></script><title>Insert title here</title></head><body><textarea id="text" style="width: 1200px; height: 200px;"></textarea><input type="button" value="测试异步跨越" onclick="testajax()" /><script type="text/javascript">function testajax(){$.ajax({url:"http://localhost:8081/category.json",type: "GET",success: function (data) {$("#text").val(JSON.stringify(data));}}); }</script></body></html>

 

 

 1.3测试Ajax跨越

Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

 测试发现Ajax跨越请求失败了

 

解决方案jsonp跨域

 

在前面的测试中,我们发现Ajax跨越请求时,json数据被浏览器禁用了。

 

原因:浏览器禁止远程加载Json数据。(浏览器安全机制)

 

 

 

如何解决呢?

 

答:使用Jsonp方式。

 

 2.1Jsonp原理

2.1.1Jsonp 实现的前提

  浏览器允许跨越加载同源数据

  即在JavaScript脚本中发送请求,就可以远程加载js格式数据

 

2.1.2请求原理:

  (1异步请求的时候加上一个名为callback的回调函数

  (2在接口中将返回的json格式数据伪装成js脚本格式

  (3)得到js格式数据后,提取里面的json数据。

 Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

2.2 修改testJsonp.jsp,指定异步请求为jsonp方式。

<script type="text/javascript">function testajax(){$.ajax({url:"http://localhost:8081/category.json",type: "GET",dataType: "jsonp",//jsonp请求jsonp:"callbackFunction",  //请求参数名jsonpCallback:"showData",  //回调函数名称success: function (data) {$("#text").val(JSON.stringify(data));}}); }</script>

 2.3修改category.json文件,将返回数据包装成js脚本。

 Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

2.4 再次发送ajax异步请求,使用jsonp方式

 Ajax跨越请求失败,解决 _ JavaClub全栈架构师技术笔记

结论

  (1jsonpajax技术中的一种异步请求方式。

     2jsonp能实现跨越请求。

     3jsonp跨越时,需要指定一个回调函数,并使用该函数将返回的数据伪装成js脚本。

     4)获取返回的js脚本后,jsonp自动提取其中的json数据。

 

作者:___mouM
来源链接:https://www.cnblogs.com/aknife/p/11259980.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/113257.html

标签:解决办法
分享给朋友: