跨域问题 初涉

前面作了一个demo实现ssl证书认证,实现后再跑整个项目流程时发现,有些链接、返回值没法正常链接与传递。ajax

这时,就涉及到了跨域问题。json

因此要进行一些改动跨域

1、前台AJAX访问app

var sign_url=basepath+"/user/login.do";async

修改前的ajax:函数

$.ajax({
  url: sign_url,
  data: {loginName:username,pwd:password},
  dataType: 'json',
  type: 'post',
  async: true,
  success: function (data) {
    alert("success");
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert("error");
  }
});post

修改后的ajax:jsonp

$.ajax({
  url: sign_url+"?loginName="+username +"&pwd="+password,
  dataType: 'jsonp',
  type: 'post',
  async: true,
  jsonp: "callback",//传递给请求处理程序或页面的,用以得到jsonp回调函数名的参数名(通常默认为:callback)
  jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也能够写"?",jQuery会自动为你处理数据
  success: function (data) {
    alert("success");
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert("error");
  }
});url

 

2、后台返回orm

修改前的后台返回:

public static void write(final HttpServletResponse response, final Object obj1, final String datePattern) {
  if(obj1==null) return;
  Object obj = obj1;
  PrintWriter out = null;
  try {
    JsonConfig cfg = new JsonConfig();
    registerConf(cfg);
    if(obj1 instanceof Pagination<?>) obj = JSONObject.fromObject(obj1,cfg);
    dformat.applyPattern(datePattern);

    Object json = null;
    defaultNull(obj);
    if(obj instanceof List||(obj instanceof String && obj.toString().startsWith("[") && obj.toString().endsWith("]"))){
      json = JSONArray.fromObject(obj,cfg);
    }else{
      json = JSONObject.fromObject(obj,cfg);
    }
    out = response.getWriter();
    out.print(json);

  } catch (IOException e) {
    LOG.error("输出流获取异常[obj]"+obj.toString(), e);
  } finally {
    if(out!=null) out.close();
  }
}

修改后的后台:

public static void writeByCallback(final HttpServletResponse response, final Object obj1, final String datePattern, final HttpServletRequest request) {
  if(obj1==null) return;
  Object obj = obj1;
  PrintWriter out = null;
  try {
    JsonConfig cfg = new JsonConfig();
    registerConf(cfg);
    if(obj1 instanceof Pagination<?>) obj = JSONObject.fromObject(obj1,cfg);
    dformat.applyPattern(datePattern);

    Object json = null;
    defaultNull(obj);
    if(obj instanceof List||(obj instanceof String && obj.toString().startsWith("[") && obj.toString().endsWith("]"))){
      json = JSONArray.fromObject(obj,cfg);
    }else{
      json = JSONObject.fromObject(obj,cfg);
    }
    out = response.getWriter();
    out.println(request.getParameter("callback")+"("+json.toString()+")");//返回jsonp格式数据
  } catch (IOException e) {
  LOG.error("输出流获取异常[obj]"+obj.toString(), e);
  } finally {
    if(out!=null) out.close();
  }
}

添加了final HttpServletRequest request,经过request获取callback(即:request.getParameter("callback")),前台ajax传过来的jsonp

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息