ajax跨域请求结合springmvc后台代码学习整理

ajax跨域请求,在工作中遇到使用ajax发起请求获取数据,但是请求的数据不在同一个域下,这样子就要使用到ajax的跨域请求了! 我使用的框架 SpringMVC,我在PC端的项目里面写一个接口方法,但是在wap项目中也要用改接口!下面贴出示例代码:

大家好,又见面了,我是全栈君。

ajax跨域请求,在工作中遇到使用ajax发起请求获取数据,但是请求的数据不在同一个域下,这样子就要使用到ajax的跨域请求了!
我使用的框架 SpringMVC,我在PC端的项目里面写一个接口方法,但是在wap项目中也要用改接口!下面贴出示例代码:
(1):前台请求代码
①:正常请求(不跨越)

$.ajax({
    url:'${pageContext.request.contextPath}/dufy/test',
    type:'get',
    data:{data:data},
    dataType:'json',
    success:function(data){
        //do something...
    },
    error: function(data){
        //do something...
    }

})

也可以使用 .getJSON() .getJSON的详情请点击 这里查看
②: 跨域请求

$(function(){ 
   
$.ajax({  
        type:'get',  
        url : '${pageContext.request.contextPath}/dufy/test',
        data:{data:data},
        dataType : 'jsonp',  
        jsonpCallback: 'callback',
        success  : function() { 
     
           //do something...
        },  
        error : function(data) { 
     
          //do something...
        }  
   });
})

function callback(data){ 
   
    var jsonobj = eval('(' + data + ')'); 
    if(jsonobj.orderCount!=""){
        //do something...
    } 
}

(2):后台代码

    @RequestMapping(value="/dufy/test",method=RequestMethod.GET)
    @ResponseBody
    public void test(HttpServletRequest request,HttpServletResponse response){
        response.setHeader("P3P", "CP=CAO PSA OUR");
        response.addHeader("Access-Control-Allow-Origin", "*");
        String data = request.getParameter("data");

        //1:业务逻辑
        JSONObject returnMap = new JSONObject();
        if(StringUtil.isEmpty(data)){
            returnMap.put("state", "error");
        }else{
            returnMap.put("state", "success");
        }
        //2:输入json数据到前台页面
        PrintWriter pWriter = null;
        try {
            pWriter = response.getWriter();

            String type = request.getParameter("type");
            if("pc".equals(type)){
                pWriter.write(returnMap.toJSONString());

            }else if("wap".equals(type)){   
                pWriter.write("callback('" + returnMap.toJSONString() + "')");
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
            if(pWriter!=null){
                pWriter.flush();
                pWriter.close();
            }           
        }

    }

在使用过程注意:后台代码中的 callback要与前期台调用 jsonpCallback: ‘callback’, 对应!
但是实际过程中又遇到新的问题,这个callback不能直接后台硬编码写死!要不前台如果有两个以上的请求在js中写两个function callback() 就会有错误!函数名称相同了,那么怎么解决这个问题呢?
优化一下后台的代码:

...
//优化代码:添加后台获取callback
String callback = request.getParameter("callback");
...
//优化代码
pWriter.write(""+callback+"('" + returnMap.toJSONString() + "')");
//之前前代码
pWriter.write("callback('" + returnMap.toJSONString() + "')");

这样子就实现了动态化!

使用过程中如果有问题,欢迎一起讨论!
参考资料:
1:jquery中ajax处理跨域的三大方式
2:JQuery的Ajax跨域请求的解决方案
3:疯狂的JSONP
4:关于JSON与JSONP简单总结
5:window.name实现的跨域数据传输
6:JavaScript跨域总结与解决办法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121234.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月25日 上午7:00
下一篇 2022年2月25日 上午7:00


相关推荐

  • AjaxPro使用说明【转载】

    AjaxPro使用说明【转载】AjaxPro使用说明    1目录    2修改历史纪录    31、什么是Ajax    42、为什么使用Ajax    43、Ajax应用场景    44、Ajax开发框架    55、AjaxPro说明    66、AjaxPro实例说明    62.1、添加AjaxPro.dll应用    62.2、

    2022年7月15日
    20
  • 大数据企业申报!2022年度武汉市大数据企业认定条件、流程和材料汇编

    大数据企业申报!2022年度武汉市大数据企业认定条件、流程和材料汇编武汉市大数据企业认定条件是怎样的 认定流程又是怎样的 认定材料要准备哪些

    2026年3月19日
    1
  • idea 格式化代码 快捷键

    idea 格式化代码 快捷键ctrl alt lidea 格式化代码快捷键

    2026年3月19日
    2
  • 为什么很多电影字幕和台词对不上_你不是电影而是现实

    为什么很多电影字幕和台词对不上_你不是电影而是现实首先,要申明一点,过去与现在,电影的字幕都不是问题。并且,网络如此自由,未来也不是问题。只是分享的平台不会一家独大,分享的途径方式也会多种多样。防止还有人不知道如何加载字幕,再说明一下。1、将.srt

    2022年8月5日
    14
  • 电商运营有前途吗?看看运营者的血泪史

    电商运营有前途吗?看看运营者的血泪史废话不说,进入正题,在知乎上,这个小伙是这么问滴:  题主男,今年25岁,大学学的是教育技术学(坑!),毕业三年一直从事教育行业,但本人并不喜欢。但对电商还是蛮感兴趣的,于是打算转行,前几天拿到了一个做小家电电商的offer,现在上班两天了,职位是运营助理,当然了,我的职业目标是电商运营。  介绍下这家公司,是做小家电的,有天猫,C店,1号店,京东等平台,从老板口中得知去年的营业额

    2025年8月30日
    5
  • vuecli4升级到vuecli5踩坑记录

    vuecli4升级到vuecli5踩坑记录项目以来的 module 版本很新 用到了 es2020 的语法 在 vuecli4 版本上死活编译不成功 升级 5 后解决 这个过程中在配置 vue config js 中遇到了很多问题 记录下来或许能给其他人提供帮助 vuecli 官网英文已经更新为最新的 cli5 但中文还停留在 cli4 导致我最开始在查资料时一直没有查到官方资料 后来偶然间切换英文才发现 1 配置 scss pretendData 变为 additionalDa 启用 cssmoudles 这个 vuecli 官网也有记录 Workingwi

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号