jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整

啊哈哈哈哈哈哈哈哈哈哈哈我太激动了~ 其实这个工作我一直在拖延啊,就觉得哇,好难啊,不想做欸= =

然后硬着头皮研究了一整个下午+晚上终于搞清楚了~~~~哇哈哈哈哈~~~好神奇哈哈哈哈哈~~~(疯了吧!)

json、jsonp、jQuery Ajax这些东西说定义我也不是特别研究,只懂个大概,就不去复制百科了,没意思。

一、先说我要做的事情的需求,上来就撸代码估计很多人懵逼(就像今天下午的我一样- -||)

  意图:本地服务端servlet生成json数据,我想在前端获取json数据并渲染成列表显示。

   那么  本地服务端和前端如果放在统一域名和不同域名下就是两种情况。

下面我也会通过这两种情况详细说明。

二、json数据的准备(如果已经生成过,可以略过)

微信小程序之微票前后端简易版+五天实训总结 这一篇里已经可以在servlet里生成json数据了,谷歌浏览器安装JSONView就可以看到

(注意:数据库之类的都是自己搭建的,获取的json数据的方法可以百度或者参考微信小程序之微票前后端简易版+五天实训总结

这里生成的其实叫json数组,最后遍历的时候,看清楚是数组还是对象很重要,因为数组要写一个双重遍历。

三、前端文件和servlet同域的情况下

意思就是在同一工程下:

重要代码块:

前端html文件:

<div id="box">
	<div>

  

<script type="text/javascript">
            $(document).ready(function(){
                $.ajax({
                    type: "POST",//请求方式
                    url: "http://127.0.0.1:8080/soga/GetInfo?type=resourse",//地址,就是json文件的请求路径
                    dataType: "json", //数据类型可以为 text xml json  script  jsonp
                    success: function(data){
					data=eval(data);
					addBox(data);
					alert(data);//alert函数无法解析json对象

                    },
				error: function(){
				alert(‘fail‘);
				}
                });
            });
            function addBox(result){
                //result是一个集合,所以需要先遍历
				$.each(result,function(index1,values){
                $.each(values,function(index,obj){
                   $("#box").append("<tr>"+//获得视频地址
                        "<td><a src="+obj.resourse_path+">"+obj.word+"</a></td>"+
                        "<td></td>"+
                        "<td> > </td>"+
                        "</tr>");
						});
                });
            }

      </script>  

servlet里面不用改什么!

测试:

不行吗?为啥?

请各位看看script里的127.0.0.1和这里的localhost 在jsonp这里就认为是不同域的!!所以:

ok!

四、不同域

  我把前端文件搬了家,

callback对于jsonp来说非常重要!!

前端不仅要改,servlet也要改!!

 <script type="text/javascript">
            $(document).ready(function(){
                $.ajax({
                    type: "GET",//请求方式
                    url: "http://127.0.0.1:8080/soga/GetInfo?type=resourse",//地址,就是json文件的请求路径
                    dataType: "jsonp", //数据类型可以为 text xml json  script  jsonp
                   jsonp: "callback",
		  jsonpCallback:"message",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
                    success: function(data){
					data=eval(data);
					addBox(data);
					 data=JSON.stringify(data);
					alert(data);//alert函数无法解析json对象,so需要转化

                    },
				error: function(){
				alert(‘fail‘);
				}
                });
                /*.get("http://localhost:8080/soga/GetInfo?type=resourse",function(result){
                 //result数据添加到box容器中;
                 addBox(result);
                 });*/
            });
            function addBox(result){
                //result是一个集合,所以需要先遍历
				$.each(result,function(index1,values){
                $.each(values,function(index,obj){
                   $("#box").append("<tr>"+//获得视频地址
                        "<td><a src="+obj.resourse_path+">"+obj.word+"</a></td>"+
                        "<td></td>"+
                        "<td> > </td>"+
                        "</tr>");
						});
                });
            }

      </script>

  servlet代码在上面提到的博客里,下面是截图修改的地方。

好,测试一下。

是可以的!

时间: 2024-07-30 13:53:12

jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整的相关文章

JQuery+ajax+jsonp 跨域访问

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 关于Jsonp更详细的资料请参考http://baike.baidu.com/view/2131174.htm,下面给出例子: 一.客户端 Html代码   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.

jsonp跨域访问服务

前段时间在做产品开发的时候,需要与公司网站那边进行交互,我们所开发的产品上线后是放在一个域名下,公司网站那块是在另一个域名下,这样在页面中调用 网站那边的接口时就存在跨域的问题,当时为了不修改网站那边的接口,所以采用在服务端通过webservice方式进行调用网站接口,问题也很快解决了,当时我就在想 如果需要在js中直接访问的话,就涉及到到跨域的问题,那么怎么做才能解决这个问题呢,我上网找了一些资料,最后采用的是jsonp的方式来解决的.下面我来给大家分享下 用jsonp方式解决跨域问题.分为以

jquery Jsonp 跨域访问

$(function () { $.ajax({ url: 'http://ihisuns.vicp.cc:8765/PcClient.aspx', data: { "ModuleName": "MiXinDialogue", "MethodName": "GetMiXinDialogue", "Id": "1" }, dataType: "jsonp", jsonp

JSON跨域读取那点事(JSONP跨域访问)

最近在码一个小项目,需要远程读取json.因为需求很少,如果引用jquery使用其getjson方法就显得很浪费嘛= = 这篇文章很详细的解释了JSON跨域读取的前世今生,把原理讲得很透彻.特此分享. 原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强

【AngularJs】---JSONP跨域访问数据传输

大家会自然想到只有一个字母之差的JSON吧~ JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿 JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议.我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式.看到没?一个是描述信息的格式,一个

jsonp跨域访问的原理及参数作用

什么是JSONP 先说说JSONP是怎么产生的: 1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准: 2.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>): 3.于是可以判断,当前阶段如果想通过纯web端(Active

jsonp跨域访问

JavaScript解决API请求时的跨域处理问题 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>JSONP实现跨域访问</title> 6 </head> 7 <body> 8 <div id="mydiv"> 9 <b

SpringSecurity解决跨域问题,在SpringBoot整合SprinSecurity中如何用前后端分离Ajax登录,Ajax登录返回状态200还是近error

先说说SpringSecurity如何实现前后端分离Ajax登录? 今天使用SpringBoot整合SpringSecurity中想使用Ajax替代SpringSecurit的Form表单提交,在这里我们的提交方式还是使用表单提交 http.formLogin().loginProcessingUrl("/authentication/form") loginProcessingUrl方法表示你登录请求的地址,在这里SpringSecurity默认登录页面地址是/login ,填写了u

跨域访问http接口的使用

最近在弄一个sip网页集成版软电话,为了功能的完善,呼叫中心的工作人员为我们提供了一个http接口,我先在网页中直接打开分析了一下他的返回值,然后又放到js中去访问,结果一放到js中一访问就发现浏览器会提示: 刚开始我百思不得其解,查询过表头中未找到源http://localhost:8080,原本我还以为是在发送的时候我的表头有问题,但是用html5设置表头尝试了几次,发现还是提示一样的问题,于是我又在网上查询了一下0x80070005这个错误代码,网上提示说是属于跨域了,于是我又跟着网上的方