代码基于 servlet 项目,部署到服务器时碰到跨域问题,请求不到数据,朋友推荐了这种写法,经测试可用。
下面是JS代码:
$.ajax({
type:"post",
url:"http://域名或IP:端口号/项目名/servlet名称", //url写异域的请求地址
data:{"type":"checkMember","desNo":logDesNo,"openId":openId,"brand":brandid},
dataType:"jsonp", //加上datatype
jsonp: "callback", //服务端用于接收callback调用的function名的参数
contentType:"application/json;charset=uft-8",
success:function(data){
if(data.status=="success"){
alert("success");
}else{
alert("当前手机号暂未注册.请前往注册.");
}
console.log(data);
},error:function(data){
console.log("请求异常");
}
});
Java 代码:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException{
resp.setContentType("text/json;charset=UTF-8");
PrintWriter out = resp.getWriter();
String type = req.getParameter("type");
Map<String, Object> map = null;
String a = null;
//对应 JS 中的jsonp:"callback"
String callback = req.getParameter("callback");
if("checkMember".equals(type)){
String desNo = req.getParameter("desNo");
String brand = req.getParameter("brand");
String openId = req.getParameter("openId");
Object[] params = {desNo,brand,openId};
map = new HashMap<String, Object>();
int checkresult = 0;
try {
checkresult = cs.checkMember(params);
System.out.println(checkresult);
} catch (SQLException e) {
e.printStackTrace();
}
}
//封装成 jsonp 的返回格式
JSONObject json = JSONObject.fromObject(map);
a = callback+"(" + json.toString() + ")";
out.print(a);//输出返回值
out.flush();
out.close();
}