jquery Ajax 跨域调用(jsonp)

最近一直在做电子商务方面的项目,包括买家和卖家后台 分别在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.setHeader("Cache-Control", "no-cache");
	    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){//返回json格式
				JSONObject j = new JSONObject();
				j.put("id", c.ID);
				j.put("name", c.Name);
				ja.add(j);
			}
			
			  String cb = request.getParameter("callback");//若果是ajax请求会带这个参数 你可以firfox的firbug跟踪一下就看到了  
			  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',//跨域必须用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请求了。




  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飓风zj

感谢打赏,thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值