ajax跨域问题的解决办法

本文介绍了一种通过使用JSONP方式解决跨域问题的方法,并提供了具体的前端及后端实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$.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()+")";

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值