`
xunmengsj
  • 浏览: 10003 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

详解Jquery和AngularJs中jsonp解决跨域问题

阅读更多

众所周知,jsonp可以解决跨域问题,下面是我在查阅资料和实际项目使用后的一些总结。

  • Jquery中jsonp的使用
myUrl = "http://localhost:8090/api/test";
$.ajax({
  type:"GET",
  url:myUrl,
  dataType:"jsonp",
  jsonp:"callback",
  jsonpCallback:"jsonpCallback",
  success:function(data){
    alert(data.msg);
  }
});
function jsonpCallback(data){
     alert(data);
}
1.jsonp只能使用get请求,解决同源问题,返回javascript代码,因为请求javascript文件是没有同源问题的。
2.当请求数据类型为jsonp时,会将callback=jsonpCallback加在url上,http://localhost:8090/api/test?callback=jsonpCallback
3.前台javascript中定义jsonpCallback函数,此函数必须定义在window下,也就是全局的函数,否则找不到。
4.后台获取请求的callback参数值jsonpCallback,返回字符串"jsonpCallback(result)",result为返回结果。
5.请求返回的是script tag,首先会调用jsonpCallback函数,不管是否找到该函数,都会调用success函数。
6.如果没有定义jsonp和jsonpCallback,jsonp默认为"callback",jsonpCallback会是Jquery自动生成的函数名。
  • angularJS中jsonp的使用
myUrl = "http://localhost:8090/api/test?callback=JSON_CALLBACK";
$http.jsonp(myUrl).success(
     function(data){
          alert(data);
     }     
);
1.angularJS中使用$http.jsonp函数
2.指定callback和回调函数名,函数名为JSON_CALLBACK时,会调用success回调函数,JSON_CALLBACK必须全为大写。
3.也可以指定其它回调函数,但必须是定义在window下的全局函数。
4.url中必须加上callback
5.当callback为JSON_CALLBACK时,只会调用success,即使window中有JSON_CALLBACK函数,也不会调用该函数。
  • jersey对jsonp的支持
    @GET
    @Path("test")
    @Produces("application/javascript")
    public JSONWithPadding sendTransToPlugin(@QueryParam("callback") String callback) {
        PluginEvent pluginEvent = new PluginEvent("aaa","","");
        pluginEvent.setAppendDescription("");
        pluginEvent.setErrorDescription("");
        Gson gson = new Gson();
        String json = gson.toJson(pluginEvent);
        JSONWithPadding js = new JSONWithPadding(json,callback);
//        JSONWithPadding js = new JSONWithPadding(new GenericEntity<PluginEvent>(pluginEvent){},callback);
        return js;
    }
 
@GET    
@Path("test")
@Produces(MediaType.APPLICATION_JSON)    
public String callTest(@QueryParam("callback") String callbackFunName) {    
    StringBuilder stringBuilder = new StringBuilder(callbackFunName);    
    stringBuilder.append("(");    
    stringBuilder.append(123);    
    stringBuilder.append(")");    
    return stringBuilder.toString();    
}
  • Servlet中的使用
@Override    
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {                                  
    resp.setContentType("application/json;charset=UTF-8");    
    PrintWriter out = resp.getWriter();   
    String callbackFunName = req.getParameter("callback");    
    StringBuilder stringBuilder = new StringBuilder(callbackFunName);    
    stringBuilder.append("(");    
    stringBuilder.append(123);    
    stringBuilder.append(")");    
    out.println(stringBuilder.toString());    
    out.print(result);    
    out.flush();    
    out.close();    
1
1
分享到:
评论

相关推荐

    jQuery使用JSONP实现跨域获取数据的三种方法详解

    使用jQuery提供的接口,开发者可以很容易地实现JSONP跨域请求,具体方法包括$.ajax()、$.getJSON()和$.getScript()等。在实际使用过程中,需要注意回调函数名的正确传递和处理,以及确保服务器端正确响应JSONP请求。...

    解决JQurey跨域问题$.get|$.post|$.getJSON等等统统可跨域

    通过合理使用JSONP和CORS,可以有效地解决jQuery的跨域问题。 压缩包中的文件`jquery.js`是jQuery库的核心文件,`index.jsp`、`a.jsp`、`b.jsp`、`c.jsp`和`d.jsp`可能是用于展示和测试跨域功能的页面,其中可能...

    Jquery跨域Json请求处理

    ### Jquery跨域Json请求处理详解 #### 一、跨域问题概述 在现代Web开发中,跨域问题是一个常见的技术挑战。简单来说,当一个网页尝试从不同的源(源可以理解为协议、域名或者端口号)加载资源时,就会遇到跨域限制...

    详解JSON和JSONP劫持以及解决方法.docx

    JSON劫持和JSONP劫持属于CSRF攻击范畴,因此解决的方法和解决CSRF攻击的方法一样。有两种解决方法: 1. 验证HTTP Referer头信息:在服务器端验证 Referer 头信息,以确保请求来自合法的来源。 2. 在请求中添加CSRF ...

    js解决跨域访问问题

    跨域访问问题是Web开发中常见的技术难题之一,通过理解同源策略的原理和掌握JSONP、CORS等技术,可以有效地解决这一问题。开发人员应根据实际需求选择最合适的解决方案,确保应用程序能够稳定、高效地运行。

    jsonp跨域调用

    ### JSONP跨域调用详解 #### 一、JSONP定义及原理 **JSONP**(JSON with Padding)是一种被广泛采用的技术,用于绕过浏览器的同源策略限制,实现跨域数据请求。虽然JSONP并不是一种正式的标准或协议,但它在实际应用...

    详解js跨域请求的两种方式,支持post请求

    常用的jquery实现跨域调用 $.ajax({ url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php", dataType: "jsonp", jsonp: "callback", context: document.body, success: function(data) { ...

    jsonp跨域请求数据实现手机号码查询实例分析.docx

    而JSONP(JSON with Padding)作为一种解决跨域问题的有效手段,被广泛应用于实际项目中。 #### JSONP 的基本原理 JSONP 是一种跨域数据交互的方案,它利用了`&lt;script&gt;`标签不受同源策略限制的特点来实现跨域数据...

    详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】

    3.3、jQuery使用JSONP跨域 3.4、跨域资源共享(CORS) 3.5、小结 四、弹出层 五、模板引擎 5.1、Hello World 5.2、方法 5.3、与AJAX结合应用 六、示例下载 一、AJAX示例 AJAX全称为“Asynchronous JavaScript And...

    详解Vue 开发模式下跨域问题

    JSONP 是一种解决跨域问题的方法,它使用 script 标签引入 JavaScript 文件,不受域名限制。然而,它只能用于 GET 请求,不支持 POST 请求。 解决跨域问题的步骤 1. 设置请求头部:在后端设置请求头部,添加 ...

    详解JavaScript中jQuery和Ajax以及JSONP的联合使用

    总的来说,jQuery库中Ajax方法和JSONP技术的联合使用,为前端开发者提供了一种简便且强大的方式,来实现复杂的数据交互场景,尤其是在需要跨域请求时。通过这些技术,可以开发出性能更优、用户体验更佳的网页应用。

    详解Java Ajax jsonp 跨域请求

    JSONP虽然解决了跨域问题,但也存在一些安全风险,因为它允许服务器返回任意的JavaScript代码,可能导致XSS(跨站脚本攻击)。此外,JSONP只支持GET请求,不能处理POST等其他HTTP方法,也不支持HTTP头部,因此在...

    jQuery中JSONP的两种实现方式详解

    在jQuery中,JSONP提供了两种实现方式,主要用于解决JavaScript进行AJAX请求时遇到的跨域问题。 ### 第一种实现方式 在jQuery中,我们可以通过设置`dataType`参数为`"jsonp"`来指定使用JSONP。同时,我们需要指定`...

    ajax跨域问题!

    ### AJAX跨域问题详解 #### 一、引言 在Web开发中,由于浏览器的安全策略限制...随着现代Web技术的发展,CORS(跨源资源共享)等新的跨域通信方案也被广泛采用,开发者可以根据实际情况选择最合适的方案来解决问题。

    关于jQuery.ajax()的jsonp碰上post详解

    在前端开发中,跨域问题是经常需要面对的一个技术挑战。所谓同源策略,是指在浏览器中...通过理解跨域请求的工作原理和JSONP实现方式,开发者可以更加灵活地解决前端开发中的跨域问题,同时确保应用的安全性和稳定性。

    浅析JSONP解决Ajax跨域访问问题的思路详解

    难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaScript或jQuery是在Web前端开发中经常使用的动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same- Origin Policy”...

    Ajax跨域详解与代码

    **Ajax跨域详解** 在Web开发中,Ajax(Asynchronous JavaScript and XML)技术允许我们实现页面的...通过分析这些文件,开发者可以更好地理解和实践Ajax跨域的解决方案,确保在实际项目中能够顺利地进行跨域数据交互。

Global site tag (gtag.js) - Google Analytics