`
jafisher
  • 浏览: 56697 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

jsonp跨域及rest接口实现

阅读更多
    jsonp是json的一种模式,专门用来解决前端跨域请求数据的问题。它允许在服务器端生成script tags返回至客户端,通过javascript callback的形式来实现站点访问。
    一般来讲,ajax请求数据是没有权限跨域请求的,只能请求本域名下的接口,再调用其他域名的服务,就是自己前端->自己后台->别人后台的这种模式,还是很不方便的。
自己前端->别人后台就是属于跨域请求了,尽管浏览器不允许页面中的脚本程序跨域读取数据,但却允许HTML引用跨域的资源,所以前端调用js文件是可以跨域的,只要是资源文件都是可以支持跨域的。
    要支持跨域,除了前端脚本要实现jsonp模式请求,服务端还需要对返回数据封装成普遍的js文件格式,前端收到js文件格式的数据时会自动解析到数据,进行处理。而因为js是原生支持json的,所以服务端可以将数据以json格式处理。
    在传输的过程中,前端可以传递一个callback参数,服务端解析到后作为函数名返回给前端,前端再对callback参数进行校验是否一致。
    这种调用方式就是jsonp。

前端实现:
$.ajax({
        url: "//xxx.com/xxx",
        type: "get",
        dataType: "jsonp",
        data: "",
        success: function(s) {
            alert(s);
        }
    })


服务端实现:
1)servlet接口
@RequestMapping(value="/xxx")  
public void doGet(HttpServletRequest request, HttpServletResponse response) {  
    String callback = request.getParameter("callback");  
    response.setContentType("application/x-javascript");  
    response.setCharacterEncoding("UTF-8");  
    
    try {  
      PrintWriter out = response.getWriter();  
      String jsonp = "jsonp data";
      out.write(callback+ "(" + jsonp + ")");   
      out.flush();  
      out.close();  
    } catch (IOException e) {  
      e.printStackTrace();  
    }  
}  

2)rest接口
1.web.xml增加监听
<listener>      
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
</listener> 

2.java实现:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String callback = request.getParameter("callback");
String jsonp = "jsonp data";
return callback + "(" + jsonp + ")";
0
0
分享到:
评论

相关推荐

    Activiti-rest所有接口描述

    - **JSONP(JSON with Padding)**:通过动态插入`&lt;script&gt;`标签来实现跨域请求,仅适用于GET请求。 - **代理服务器**:通过设置前端代理服务器来绕过浏览器的同源策略限制。 ##### 5. Activiti-REST HTTP方法和...

    单点登陆实现(完全跨域、单点退出)

    通过设置CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)等技术,我们可以实现完全跨域,允许来自不同源的请求访问SSO服务,确保用户在任何地方都能享受到统一的登录体验。 6. **单点...

    一个REST获取天气预报的客户端小例子(分别用C#和jQuery实现)

    3. JSONP处理:如果天气预报API支持跨域请求,可能会使用JSONP(JSON with Padding)来绕过浏览器的同源策略限制。 4. 数据处理:接收到响应后,使用jQuery的$.parseJSON()或$.getJSON()解析JSON数据,然后动态更新...

    WCF REST服务中对JSONP的支持

    **描述:**该主题涉及如何在Windows Communication Foundation (WCF) REST服务中实现JSONP(JSON with Padding)支持,以允许跨域数据交换,这对于Web应用程序的灵活性和交互性至关重要。JSONP是一种规避浏览器同源...

    cxf-webservice-rest:这是一个cxf rest的webservice demo可以通过ajax 跨域直接访问不需要jsonp形式

    本项目“cxf-webservice-rest”是一个使用CXF实现RESTful Web服务的示例,它允许AJAX跨域访问,无需采用传统的JSONP形式。以下是对该项目的详细解析。 首先,我们要理解什么是CXF。CXF(CXF: Apache CXF - Next ...

    arcgisserver跨域

    - **REST服务目录配置**:每个服务都可以在其REST接口中设置`AllowCors`属性为`true`,允许来自不同源的请求。 - **ArcGIS Server站点级别配置**:在ArcGIS Server管理器中,可以全局开启跨域,让所有服务都允许...

    arcgis api for silverlight跨域文件

    JSONP通过动态插入`&lt;script&gt;`标签来实现跨域请求,服务器返回的响应被包装在一个函数调用中,由客户端执行。 3. **使用代理服务**:在某些情况下,可以创建一个中间代理服务,该服务运行在与你的应用相同的域上,它...

    jquery+ajax实现跨域请求的方法

    本文实例讲述了jquery+ajax实现跨域请求的方法。分享给大家供大家参考。具体实现方法如下: 说明:这里的dataType 为 “jsonp” ;type 只能为 GET 前台请求代码如下: 代码如下:$.ajax({  type: “GET”,  url...

    接口安全道亦有道.pdf

    而形态接口则根据实现方式(如SOAP、REST或JSONP)有所不同。 以密码找回为例,许多网站提供了账号检测功能,这往往成为攻击者的切入点。他们可以尝试匹配返回信息,获取用户名甚至手机号。此外,某些论坛的密码...

    Django实现跨域请求过程详解

    本文介绍了Django实现跨域请求的方法,包括了简单请求与复杂请求的概念、JsonP的基本原理及其局限性,以及如何通过自定义中间件在Django项目中实现跨域支持。通过以上步骤,开发者可以在实际项目中有效地解决跨域...

    最新RestServer1.1更新发布

    在RestServer1.1中,开发团队已经实现了JSONP回调函数的支持,使得JQUERY和其他兼容JSONP的库可以无缝地与RestServer进行交互,极大地扩展了RestServer的适用范围。 其次,日志记录功能的加入是另一个重要改进。...

    SNS社区网站WEB即时通信技术解决方案

    这些技术的应用确保了后台服务器能够高效地处理大规模分布式集群的需求,而前端则通过JSONP实现跨域长轮询,减轻了主站点的性能压力。 - **参考案例分析**: - **Facebook**:Facebook是首批引入WebIM功能的社交...

    Vue使用json-server进行后端数据模拟功能

    正开发过程中 前后端分离或者不分离 ,接口多半是之后与页面的开发 ,所以建立rest的APL的接口 给前端提供虚拟的数据是非常必要的 所以这里我使用了json-server作为工具,支持CORS和JSONP跨域请求,支持GET, POST, PUT,...

    jira-rest-test

    Jira是一款强大的项目管理和问题跟踪工具,其REST API为开发者提供了灵活的接口,使得我们可以利用编程语言与Jira进行交互,实现自动化任务、数据获取等功能。本文将围绕“jira-rest-test”这一主题,深入探讨如何...

    Ajax+Java开发实例源文件

    7. **JSONP跨域通信**:如果需要跨域请求,可以使用JSONP(JSON with Padding)技术,通过动态插入`&lt;script&gt;`标签来实现。 8. **错误处理**:在Ajax请求中,我们需要处理网络错误、服务器错误以及解析错误等各种...

    java+js交互Demo

    JSONP是一种通过动态创建`&lt;script&gt;`标签来实现跨域请求的方法。Java服务器端提供一个带有动态参数的JavaScript函数调用,如`callback=?`,客户端通过设置这个参数值来指定回调函数,服务器返回时将数据包裹在这个回...

    工作日志_李响115_202108311

    - JSONP(JSON with Padding)是一种跨域数据交互协议,适用于简单跨域请求,但不安全且不支持POST方法。 - 为了在不使用 AJAX 的情况下获取数据,可以调用服务层方法,通过 Taotao-rest 获取数据,然后将数据传递...

    基于AJAX 和Web Service的Web2.0开发

    例如,使用JSONP(JSON with Padding)解决跨域限制,使用HTTPS增强通信安全性,以及合理设计Web Service接口,减少不必要的网络通信。 综上所述,基于AJAX和Web Service的Web2.0开发利用了现代Web技术的强大力量,...

Global site tag (gtag.js) - Google Analytics