`
llyzq
  • 浏览: 577108 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jquery Ajax 跨域调用(jsonp)

    博客分类:
  • J2EE
 
阅读更多

最近一直在做电子商务方面的项目,包括买家和卖家后台 分别在seller.com 和buyer.com 还有前台www.xxx.com
其中有一个查看商品二级分类的下拉框 需要查询 当时没有考虑到这三个项目都会用到 就放到了前台的代码中,后台需求的变化,卖家和买家后台也要用到这个接口
由于初始化前台页面的时候是用ajax的方式初始化这个下拉框的,所以其他的平台的调用也想到了这个问题,紧接着就遇到ajax跨域的问题 ,下面来提供解决的方法。

下面是action的代码 由三个系统共同调用

 

  1. public class HeadAction extends BaseAction{  
  2.   
  3.     private HttpServletRequest request;  
  4.     private HttpServletResponse response;  
  5.     public void findSecondCat(){  
  6.         ActionContext ctx = ActionContext.getContext();  
  7.         request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);  
  8.         response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);   
  9.         //response.setHeader("Cache-Control", "no-cache");  
  10.         response.setContentType("text/json;charset=utf-8");  
  11.         String catType = request.getParameter("catType");  
  12.         List<CategoryNode> node = CategoryCache.getAllCategoryNodes(1, Integer.parseInt(catType));//调用缓存查询分类  
  13.         try {  
  14.             PrintWriter  out = response.getWriter();  
  15.             JSONArray ja = new JSONArray();  
  16.             for(CategoryNode c: node){//返回json格式  
  17.                 JSONObject j = new JSONObject();  
  18.                 j.put("id", c.ID);  
  19.                 j.put("name", c.Name);  
  20.                 ja.add(j);  
  21.             }  
  22.               
  23.               String cb = request.getParameter("callback");//若果是ajax请求会带这个参数 你可以firfox的firbug跟踪一下就看到了    
  24.               if(cb != null){//如果是跨域  
  25.                   StringBuffer sb = new StringBuffer(cb);  
  26.                   sb.append("(");  
  27.                   sb.append(ja.toString());  
  28.                   sb.append(")");  
  29.                   out.write(sb.toString());  
  30.                     out.close();  
  31.               }else{//不跨域的情况  
  32.                   out.write(ja.toString());  
  33.                     out.close();  
  34.               }  
  35.         } catch (IOException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.           
  39.     }  
  40. }  

下面是js代码

 

 

[javascript] view plaincopyprint?
  1. $.ajax( {  
  2.                 type : 'get',  
  3.                 url : '<%=com.utils.PubConstant.wwwDomain %>/index/findSecondCat.action',  
  4.                 data : {  
  5.                     catType : 1  
  6.                 },  
  7.                 dataType : 'jsonp',//跨域必须用jsonp  
  8.                 error : function() {  
  9.                 },  
  10.                 success : function(data) {  
  11.                             innerOption = "<option value=''>全部分类</option>";  
  12.                             for(var i=0;i<data.length;i++){  
  13.                                  innerOption += '<option value="'+data[i].id+'">'+data[i].name+'</option>';  
  14.                              };  
  15.                             $('#secondCatIdId').html(innerOption);  
  16.                             $("#lang, #secondCatIdId").jListbox();  
  17.                 }  
  18.             });  

这样就可以跨域进行ajax请求了。
分享到:
评论

相关推荐

    jquery ajax jsonp跨域调用实例代码

    今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友

    jquery ajax中使用jsonp的限制解决方法

    jsonp 解决的是跨域 ajax 调用的问题。为什么要跨域 ajax 调用呢?这样可以在一个应用中直接在前端通过 js 调用另外一个应用(在不同的域名下)的 API。我们在实际应用中也用到了 jsonp ,但之前只知道 jsonp 的一个...

    JSONP跨域GET请求解决Ajax跨域访问问题

    实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址。难道...

    利用jsonp跨域调用百度js实现搜索框智能提示

    使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript也可以实现跨域调用js。  ok,了解了jsonp的原理和应用后,我们看看百度的智能提示是如何做的 在chrome的调试窗口下看看百度搜索...

    详解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) { ...

    jquery-jsonp.js

    1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;  2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响...

    深入浅析Jsonp解决ajax跨域问题

    注意一点是,这里是用Jsonp解决ajax的跨域问题,具体的实现其实不是ajax。 1、同源策略 浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本...

    在jquery中的ajax方法怎样通过JSONP进行远程调用

    一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用,需要的朋友可以参考下

    jquery中的ajax方法怎样通过JSONP进行远程调用

    主要介绍了jquery中的ajax方法怎样通过JSONP进行远程调用,需要的朋友可以参考下

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

    实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址。难道...

    JSONP原理及简单实现

    虽然在在jquery中,我们可以通过$.ajax的dataType设置为jsonp来调用jsonp,但是jsonp和ajax的实现原理一个关系都木有。jsonp主要是通过script可以链接远程url来实现跨域请求的。如: [removed][removed] callback...

    Ajax请求WebService跨域问题的解决方案

     用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2、出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容); 3、解决方案: (1) JSONP:只支持GET方式 (2) CROS:...

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    JSONP跨域请求jQuery方式 JSONP跨域请求本质 XSS过滤以及单例模式 博客系统表结构讲解 博客系统功能讲解 CMDB介绍 CMDB实现的三种方式 CMDB Agent客户端示例 第26周 今日内容概要以及CMDB介绍 前端插件定制之表头 ...

    jQuery 1.6 API 中文版

    跨域请求和dataType: "jsonp"请求不支持同步操作。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend(jqXHR, settings)Function 发送请求前可修改 jqXHR(在jQuery 1.4.x的中,...

    Node.js返回JSONP详解

    在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP。基于安全性考虑,浏览器会存在同源策略,然而[removed]标签却具有跨域访问数据的...

    jquery电子文档chm

    jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时...

    js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)

    很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,...

    my-earthquakes-feed-test:此项目显示一个列表和一张地图,其中包含有关最近地震的信息。 信息提取自以下JSON源

    我-地震料测试 项目介绍 - - - - - - - - - -...外部JSON数据是通过JavaScript检索,也jQuery的AJAX调用+ JSONP解决读取来自Seismi.org服务器上的文件时遇到的跨域问题。 JavaScript代码调用谷歌的脚本文件来处理跨来源

    js跨域请求的5中解决方式

    跨域请求数据解决方案主要有如下解决方法: ...1、Ajax直接请求普通文件存在跨域无权访问的问题,甭管是静态页面、动态网页、web服务、wcf、只要是跨域请求,一律不行。 2、不过,web页面上调用js文件时则不受

Global site tag (gtag.js) - Google Analytics