ajax跨域问题的解决办法
2017-09-21 15:01
375 查看
$.ajax({
url: "http://localhost:8080/wechart/qryOrderInfoListByWeChart",
type: "post",
dataType: 'json',
data: data,
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(XMLHttpRequest.status);
},
success: function (json) {
alert(json);
}
});
浏览器调试一直报 XMLHttpRequest cannot load http://www.server.com/server.php. No 'Access-Control-Allow-Origin' header
is present on the requested resource.Origin 'http://www.client.com' is therefore not allowed access.
搜了下说是跨域的问题,网上找解决方法,加crossDomain:true, type改成get啦、甚至监控浏览器类型和版本去修改ajax方法,试了十几种方法,都不行!最后问了一个大牛同事,解决方法记录一下,供码农们参考:
修改ajax请求为jsonp
$.ajax({
url: "http://localhost:8080/wechart/qryOrderInfoListByWeChart?openId=1123&pageSize=5&pageNum=1",
type: "POST",
dataType: "JSONP",
jsonp: "jsonpcallback",
jsonpCallback: "qryCallback",
success:function(msg){
//alert(msg.resultMsg);
},
error: function (msg) {
alert("查询安装工单失败!");
}
});
function qryCallback(result) {
console.log(result);
}
后台代码回调定义的callback方法:
@ResponseBody
@RequestMapping(value="/qryOrderInfoListByWeChart")
public void qryOrderInfoListByWeChart(HttpServletRequest request, HttpServletResponse response) throws Exception{
Map<String,Object> resultMap = new HashMap<String,Object>();
List<WorkOrderInstall> pageList = new ArrayList<WorkOrderInstall>();
Map<String,Object> param = new HashMap<String,Object>();
int pageSize=Integer.parseInt(request.getParameter("pageSize"));
int pageNum=Integer.parseInt(request.getParameter("pageNum"));
param.put("openId", request.getParameter("openId"));
param.put("pageNum", pageNum);
param.put("pageSize", pageSize);
param.put("pageStart", (pageNum-1)*pageSize);
pageList = workOrderService.qryOrderInfoByOpenId(param);
resultMap.put("resultType", "N");
resultMap.put("resultMsg", "success");
resultMap.put("pageList", pageList);
JSONObject jsonObject = JSONObject.fromObject(resultMap);
String jsonp=request.getParameter("jsonpcallback");
PrintWriter pw = response.getWriter();
pw.print(jsonp+"("+jsonObject.toString()+")");
pw.flush();
pw.close();
}
或者这样
@ResponseBody
@RequestMapping(value="/qryOrderInfoListByWeChart")
public String qryOrderInfoListByWeChart(String openId,int pageSize,int pageNum) throws Exception{
Map<String,Object> resultMap = new HashMap<String,Object>();
List<WorkOrderInstall> pageList = new ArrayList<WorkOrderInstall>();
Map<String,Object> param = new HashMap<String,Object>();
param.put("openId", openId);
param.put("pageNum", pageNum);
param.put("pageSize", pageSize);
param.put("pageStart", (pageNum-1)*pageSize);
pageList = workOrderService.qryOrderInfoByOpenId(param);
resultMap.put("resultType", "N");
resultMap.put("resultMsg", "success");
resultMap.put("pageList", pageList);
JSONObject jsonObject = JSONObject.fromObject(resultMap);
return "qryCallback("+jsonObject.toString()+")";
}
url: "http://localhost:8080/wechart/qryOrderInfoListByWeChart",
type: "post",
dataType: 'json',
data: data,
error: function (XMLHttpReuqest, textStautus, errothrown) {
console.log(XMLHttpRequest.status);
},
success: function (json) {
alert(json);
}
});
浏览器调试一直报 XMLHttpRequest cannot load http://www.server.com/server.php. No 'Access-Control-Allow-Origin' header
is present on the requested resource.Origin 'http://www.client.com' is therefore not allowed access.
搜了下说是跨域的问题,网上找解决方法,加crossDomain:true, type改成get啦、甚至监控浏览器类型和版本去修改ajax方法,试了十几种方法,都不行!最后问了一个大牛同事,解决方法记录一下,供码农们参考:
修改ajax请求为jsonp
$.ajax({
url: "http://localhost:8080/wechart/qryOrderInfoListByWeChart?openId=1123&pageSize=5&pageNum=1",
type: "POST",
dataType: "JSONP",
jsonp: "jsonpcallback",
jsonpCallback: "qryCallback",
success:function(msg){
//alert(msg.resultMsg);
},
error: function (msg) {
alert("查询安装工单失败!");
}
});
function qryCallback(result) {
console.log(result);
}
后台代码回调定义的callback方法:
@ResponseBody
@RequestMapping(value="/qryOrderInfoListByWeChart")
public void qryOrderInfoListByWeChart(HttpServletRequest request, HttpServletResponse response) throws Exception{
Map<String,Object> resultMap = new HashMap<String,Object>();
List<WorkOrderInstall> pageList = new ArrayList<WorkOrderInstall>();
Map<String,Object> param = new HashMap<String,Object>();
int pageSize=Integer.parseInt(request.getParameter("pageSize"));
int pageNum=Integer.parseInt(request.getParameter("pageNum"));
param.put("openId", request.getParameter("openId"));
param.put("pageNum", pageNum);
param.put("pageSize", pageSize);
param.put("pageStart", (pageNum-1)*pageSize);
pageList = workOrderService.qryOrderInfoByOpenId(param);
resultMap.put("resultType", "N");
resultMap.put("resultMsg", "success");
resultMap.put("pageList", pageList);
JSONObject jsonObject = JSONObject.fromObject(resultMap);
String jsonp=request.getParameter("jsonpcallback");
PrintWriter pw = response.getWriter();
pw.print(jsonp+"("+jsonObject.toString()+")");
pw.flush();
pw.close();
}
或者这样
@ResponseBody
@RequestMapping(value="/qryOrderInfoListByWeChart")
public String qryOrderInfoListByWeChart(String openId,int pageSize,int pageNum) throws Exception{
Map<String,Object> resultMap = new HashMap<String,Object>();
List<WorkOrderInstall> pageList = new ArrayList<WorkOrderInstall>();
Map<String,Object> param = new HashMap<String,Object>();
param.put("openId", openId);
param.put("pageNum", pageNum);
param.put("pageSize", pageSize);
param.put("pageStart", (pageNum-1)*pageSize);
pageList = workOrderService.qryOrderInfoByOpenId(param);
resultMap.put("resultType", "N");
resultMap.put("resultMsg", "success");
resultMap.put("pageList", pageList);
JSONObject jsonObject = JSONObject.fromObject(resultMap);
return "qryCallback("+jsonObject.toString()+")";
}
相关文章推荐
- Ajax无刷新上传文件跨域问题解决办法
- ajax请求中遇到的跨域问题的解决办法(jsonp)
- 关于JS的Ajax bf52 方法导致跨域问题的解决办法
- ajax请求ashx跨域问题解决办法
- ajax 浏览器跨域问题的解决办法
- 几个问题(十一)-------ajax是否能跨域请求,解决的办法
- 关于AJAX调用ASP.NET MVC 或者WEBAPI项目提示I跨域问题的解决办法
- 关于PHP Ajax跨域问题的解决办法
- 关于js的ajax方法导致跨域问题的解决办法
- Ajax跨域问题的解决办法汇总(推荐)
- AJAX跨域问题解决办法
- corsFilter java ajax解决认证(Authorization)跨域问题
- 完美解决SpringMVC对Ajax访问Restful接口的跨域问题(一)
- ajax跨域的解决办法
- Python之Flask和Django框架解决跨域问题,配合附加ajax和fetch等js代码
- Ajax跨域问题的解决方法之一 —— "Access-Control-Allow-Origin"
- AJAX跨域问题解决一:使用web代理
- 完美解决AJAX跨域问题
- 解决ajax跨域请求数据cookie丢失问题
- 在iis8.5下部署ASP.NET程序AjaxPro不能用问题解决办法