场景:跨域访问,网上有很多,但好多都是只写了前端jsonp来解决,后端代码没有写,这里记录仅仅记录一下。
前端代码:
$.ajax({
url:"http://"+ESURL+"/XXXXApi/groupGoodsNo", //用作跨域的url
dataType:"jsonp", //jsonp类型
jsonp: 'callback', //后端项目返回的参数名
data : $searchp, //请求参数
success:function (data) {
$('#dg0').datagrid('loadData',data).datagrid('loaded');
}
})
或者还有一种更简单的写法,我是经常这样用的
$.getJSON("http://"+ESURL+"/XXXXApi/groupGoodsNo?callback=?",$searchp,function(data){
$('#dg0').datagrid('loadData',data).datagrid('loaded');
});
以上两个写法jQury的前端写法就写好了。第一种参数详细点,第二种是jquery提供的一个简易写法,这里有个关键的词callback这个待会后端需要用到。
后端java代码:
res.setCharacterEncoding("utf-8");
String callback=req.getParameter("callback");//得到回调函数名
res.getWriter().write(callback+"("+ JSON.toJSONString(list3)+")");
业务代码我就不写了,res和req对应的HttpServletResponse res和HttpServletRequest req,这里关键地方就是req.getParameter(“callback”)获取callback的值,然后再返回的时候将传回前端的代码括号括起来,前面加上这个获取的值。本人的前端获取结果是这样的:
jQuery111303022330776169797_1567852625815([{"intersection":24,"goods_no_B":"580564-01","goods_no_A":"LXWZ-111","Acount":191},{"intersection":1,"goods_no_B":"075441-01","goods_no_A":"BA5750-010","Acount":139},{"intersection":4,"goods_no_B":"LXWZ-111","goods_no_A":"101010","Acount":82},{"intersection":1,"goods_no_B":"804462-010","goods_no_A":"BA5954-010","Acount":79},{"intersection":1,"goods_no_B":"812654-011","goods_no_A":"AW4594","Acount":78}])
实际上你的业务数据是上述代码括号中的数组,jQuery111303022330776169797_1567852625815这个是jquery自己做的一个 标识,无须关心。
提一下怕刚用的人混淆:这里前端参数标识不一定要定义成callback(因为很多例子都是定义成这个词),可以随便定义的 。这里示例定义的是callback后端就是req.getParameter(“callback”),
如果前端定义returndata后端就是req.getParameter(“returndata”)