欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jqueryajax跨域访问解析

程序员文章站 2022-03-13 09:58:48
代码基于 servlet 项目,部署到服务器时碰到跨域问题,请求不到数据,朋友推荐了这种写法,经测试可用。 下面是js代码: $.ajax({ type:&quo...

代码基于 servlet 项目,部署到服务器时碰到跨域问题,请求不到数据,朋友推荐了这种写法,经测试可用。

下面是js代码:

$.ajax({
    type:"post",
    url:"https://域名或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 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();
        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();
}