最近一直在做电子商务方面的项目,包括买家和卖家后台 分别在seller.com 和buyer.com 还有前台www.xxx.com
其中有一个查看商品二级分类的下拉框 需要查询 当时没有考虑到这三个项目都会用到 就放到了前台的代码中,后台需求的变化,卖家和买家后台也要用到这个接口
由于初始化前台页面的时候是用ajax的方式初始化这个下拉框的,所以其他的平台的调用也想到了这个问题,紧接着就遇到ajax跨域的问题 ,下面来提供解决的方法。
下面是action的代码 由三个系统共同调用
- public class HeadAction extends BaseAction{
-
- private HttpServletRequest request;
- private HttpServletResponse response;
- public void findSecondCat(){
- ActionContext ctx = ActionContext.getContext();
- request = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
- response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);
-
- response.setContentType("text/json;charset=utf-8");
- String catType = request.getParameter("catType");
- List<CategoryNode> node = CategoryCache.getAllCategoryNodes(1, Integer.parseInt(catType));
- try {
- PrintWriter out = response.getWriter();
- JSONArray ja = new JSONArray();
- for(CategoryNode c: node){
- JSONObject j = new JSONObject();
- j.put("id", c.ID);
- j.put("name", c.Name);
- ja.add(j);
- }
-
- String cb = request.getParameter("callback");
- if(cb != null){
- StringBuffer sb = new StringBuffer(cb);
- sb.append("(");
- sb.append(ja.toString());
- sb.append(")");
- out.write(sb.toString());
- out.close();
- }else{
- out.write(ja.toString());
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
- }
下面是js代码
- $.ajax( {
- type : 'get',
- url : '<%=com.utils.PubConstant.wwwDomain %>/index/findSecondCat.action',
- data : {
- catType : 1
- },
- dataType : 'jsonp',
- error : function() {
- },
- success : function(data) {
- innerOption = "<option value=''>全部分类</option>";
- for(var i=0;i<data.length;i++){
- innerOption += '<option value="'+data[i].id+'">'+data[i].name+'</option>';
- };
- $('#secondCatIdId').html(innerOption);
- $("#lang, #secondCatIdId").jListbox();
- }
- });
这样就可以跨域进行ajax请求了。
分享到:
相关推荐
今天研究了AJAX使用JSONP进行跨域调用的方法,发现使用GET方式和POST方式都可以进行跨域调用,这里简单分享下,方便需要的朋友
jsonp 解决的是跨域 ajax 调用的问题。为什么要跨域 ajax 调用呢?这样可以在一个应用中直接在前端通过 js 调用另外一个应用(在不同的域名下)的 API。我们在实际应用中也用到了 jsonp ,但之前只知道 jsonp 的一个...
实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址。难道...
使用jquery.ajax的jsonp方法可以异域调用到百度的js并拿到返回值,当然$.getScript也可以实现跨域调用js。 ok,了解了jsonp的原理和应用后,我们看看百度的智能提示是如何做的 在chrome的调试窗口下看看百度搜索...
常用的jquery实现跨域调用 $.ajax({ url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php", dataType: "jsonp", jsonp: "callback", context: document.body, success: function(data) { ...
1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准; 2、不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响...
注意一点是,这里是用Jsonp解决ajax的跨域问题,具体的实现其实不是ajax。 1、同源策略 浏览器有一个很重要的概念——同源策略(Same-Origin Policy)。所谓同源是指,域名,协议,端口相同。不同源的客户端脚本...
一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用,需要的朋友可以参考下
主要介绍了jquery中的ajax方法怎样通过JSONP进行远程调用,需要的朋友可以参考下
实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址。难道...
虽然在在jquery中,我们可以通过$.ajax的dataType设置为jsonp来调用jsonp,但是jsonp和ajax的实现原理一个关系都木有。jsonp主要是通过script可以链接远程url来实现跨域请求的。如: [removed][removed] callback...
用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2、出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容); 3、解决方案: (1) JSONP:只支持GET方式 (2) CROS:...
JSONP跨域请求jQuery方式 JSONP跨域请求本质 XSS过滤以及单例模式 博客系统表结构讲解 博客系统功能讲解 CMDB介绍 CMDB实现的三种方式 CMDB Agent客户端示例 第26周 今日内容概要以及CMDB介绍 前端插件定制之表头 ...
跨域请求和dataType: "jsonp"请求不支持同步操作。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend(jqXHR, settings)Function 发送请求前可修改 jqXHR(在jQuery 1.4.x的中,...
在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP。基于安全性考虑,浏览器会存在同源策略,然而[removed]标签却具有跨域访问数据的...
jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时...
很庆幸,我又见到了末日后新升的太阳,所以我还能在这里写文章,言归正传哈,最近做了一个项目,需要用子域名调用主域名下的一个现有的功能,于是想到了用jsonp来解决,在我们平常的项目中不乏有这种需求的朋友,...
我-地震料测试 项目介绍 - - - - - - - - - -...外部JSON数据是通过JavaScript检索,也jQuery的AJAX调用+ JSONP解决读取来自Seismi.org服务器上的文件时遇到的跨域问题。 JavaScript代码调用谷歌的脚本文件来处理跨来源
跨域请求数据解决方案主要有如下解决方法: ...1、Ajax直接请求普通文件存在跨域无权访问的问题,甭管是静态页面、动态网页、web服务、wcf、只要是跨域请求,一律不行。 2、不过,web页面上调用js文件时则不受