jsonp跨域请求 Java_一起看看Java Ajax jsonp跨域请求

44ebe987f67f7984941a292515d21a31.png

【相关学习推荐:java基础教程】

1、什么是JSONP

一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而u p ` & { S HTML 的

JSONP是一种协议,为了解决客户端请求服务器跨域的问@ F : @ & ]题,但是并非是正式的传输协议。该协议c f N N q + U = _的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据L B { r I,这样客户端] } * K [就可以随意定制自己的函数来自动处理返回数据了.

2、Ajax 请求其他域接口

我这个项目要请求另外一个第一个后台接口请求数据,在页面渲染的p u / n k Q E f c时候,通过ajax加载数据如下:

$.ajax({

url: 'http://www.xxx.cn/lalala?method=t p r Q y R z :10082&page=1&pageSize=10'_ A Z q R &,

type: 'GET',

dataType: 'json',

timeout: 5000,

contentType: 'applict a ? # T )ation/json; charset=3 / } k n 6utf-8',

success: function (result) {

alter("aaaa");

}

});

这样就出现跨域的错误,如下所示:

Nf ; D eo 'Access-Control-All= 1 Zow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. Th{ Q 4 6 G 2 } t _e response h! / : 9 Nad HTTP status code 500.

resize,m_fill,h_38,w_937

这里就说明不允许跨域请U y 6 U求,那么怎么办? 换成jsonp好了。就改了dataType这个字段。

$.ajax({E s a ~ ) _ 6 H I

url: 'http://www.xxx.cn/lalala?method=10082&page=W ( G _ 1 S j 4 (1&pageSize=10',

typt h He: 'GET',

dataType: 'jsonp',

timeout: 5000,

contentType: 'application/json; charset=utf-8',

success: function (result) {

alter("aaaa"S * Z : @);

}

});

结果: Uncaught SyntaxError: Unexpected token!

what the fuck!97f2416d2bc2d705f9f9ac5438eb800d-1.png 明明请求回来数据,结果还是报错。原因是ajax请求服务器,而返回的数据格式不符合jsonp的返回格式,那么jsonp格式是什i L L x么样的?

Callback({msg:'this is json data'})

这是什么叼东西,奇葩谁定义的!如果你这么想,看来你没有仔细看第1点,JSON是一种轻量级的数据交换格式,像xmlb e I一样。JSONP是一种使用JSON数据的方式,返回的不是JSON对象,是包含JSON对象的javaScript脚本。但是上图是B N e ( } _ = m一段json串,所以报错啦。

3、参数返回处理

有一点你会发现在你是用jsonp协议请求时,在参数中除了自己填写的参数外还有名为callback的参数,如图:

resize,m_fill,h_69,w_596

看看这个参数是什么东西,因为我在ajax请求的时候没有指定,jsonp这个参数,那么系统k c V默认参数名为“callback”。没有指定jsonpCallback参数, 那么jquery会生成随机的函数名,如上图所示。

比如我如下. U n @ ~ B K配置:

$.ajax({

url: 'http://wwi y 5 jw.xxx.cn/lalala?method=10082&page=1&pageSize=10',

type: 'GET',

dataType: 'jsonpd % t i * K -',

jsonp:'callbacka',//传递x p 6 1 g |给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)

jsonpCallback:"su& 1ccess_jsonpCallback",//自定义的jsonp回调函数名( _ 8 c r V称,默认为jQuery自动6 q U Q x / X l生成的随机函数名

timeoul ? ; 3t: 5000,

contentType: 'applicatik A Kon/jsd m y &on; charset=utf-8',

succen P ] n J Z E U 9ss: function (result) {

alter("aaaa");

}

})~ 1 W ~ 9;

那么服务器亦可以通过下面方法获取回调的函数名:

代码如下:- I J G

string calO F hlbackFunName =O [ d 3 (request.getParamete^ r D $r("callbacka");//获取的就是success_jsonpCw ~ ( $ 9 nallback 字符串

注意:系统会区分函数名大小写。

resize,m_fill,h_118,w_612

那么下面按照格式包装一下9 k ? . $ , p看看咯:

String callback = request.getParameter("callback"- A M z); //不指定函数名默认 callback^ m D ; H Q ! Y

return callback+ "(" + jsonStr + ")"

包了一下,结T I I q | u 5 w h果真的不报错,看下返回数据如下图:

resize,m_fill,h_71,w_642

4、JSONP的执行过程

首先在客户端注册一个callbh e Wack (如:c p o [ 0 A'jsoncallback'), 然后把calN V A clback的名字(如:j_ Y z | ~ 1 / w qsonp1236827957501)传给服务器。注意:服务端得到callback的数值后,要用jsonp1236827957501(......Y T Y z M k * ])把将要输出| R q k Y ( : F的json内容包括起来,此时,服务器q w g 5 c生成 json 数L & K % U E - ]据才能被客户端H j ` T ?正确接收。

然后,u ^ e以 javascript 语法的方式,生成一个function, functw 7 ^ W kion 名字就是传递上来的参数 'jsoncallback'的值 jsonp1236827957501 .

最后,将 json 数据直! Q | @ Z J ]接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。客户端浏览器,解析scrim u $ p n w = {pt标签,并执行返回的 javascript 文档,此时javascript文@ 9 n # V T k m档数据,作为参数, 传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的succeM n B gss: function (json))里。

相关文章推荐:ajaxZ : T : L [ ;视频教程

以上就是一起看看Java Ajax jsonp跨域B { L i请求的详细内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程详细讲解了以下内容:    1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程    2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例    3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题     4.session与cookie问题及application、cookie补充说明及四种范围对象作用     5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别     6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据     7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)     8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析     9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)    1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)     11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet     12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题     13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove     14.过滤器、过滤器通配符、过滤器链、监听器     15.session绑定解绑、钝化活化     16.以及Ajax的各种应用     17. Idea环境下的Java Web开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值