js跨域请求实现

js代码

var url = zfba2url + "/fzyw/xzfy/smcl/autoUpdateByWS.action";
var data = {
  "writid": writid,
  "reportName": reportname
};
 
$.ajax({
  contentType: "application/x-www-form-urlencoded;charset=UTF-8",
  type : "post",
  url : url,
  data : data,
  cache : false, //默认值true
  dataType : "jsonp",
  jsonp: "callback", // 必须,返回的响应需要以此为前缀
  success : function(json){
     if (json.result != "success") {
       alert("自动更新扫描材料失败!");
     }
  }
});

说明:

1. contentType和type的设置,解决中文编码问题;
2. jsonp用于指定一种约定,指定一个参数名,后台根据参数名获取的参数值,用作响应的前缀(参数值是jQuery自动生成的随机函数名);如某次的值为jsonp1449309226640

后台Java代码

/**
 * 根据文书自动生成扫描材料.<br>
 * 用于一期跨域调用,扫描材料存放在文书对应的案件.
 * SINOBEST 待总结 跨域请求
 * @param model
 * @param callback 跨域请求者指定的jsonp
 * @param writid 文书编号
 * @param reportName 报表名称
 * @return
 */
@RequestMapping("/autoUpdateByWS")
public @ResponseBody
String autoUpdateByWS(Model model, String callback, String writid,
     String reportName) {
  smclService.updateSMCL(writid, reportName);
  String response = "${callback}({"result":"success"})"
       .replaceFirst("\$\{callback\}", callback);
  return response;
}

说明:

响应返回的格式是callback(jsonContent),其中callback是使用的约定指定的参数的值,当前是jQuery自动生成的。jsonContent是json格式字符串,如{"result":"success"}
如某次的返回:jsonp1449309226640({"result":"success"})

后记

上述代码是在IE6客户端测试的,在高级的IE版本不工作,可能和IE的设置有关,项目中已经弃用。

原文地址:https://www.cnblogs.com/ywjy/p/5045062.html