解决 js ajax跨域访问报“No 'Access-Control-Allow-Origin' header is present on the requested resource.”错误...

本文介绍了如何处理JavaScript AJAX请求中遇到的跨域问题,重点讨论了'Access-Control-Allow-Origin'头缺失导致的资源访问错误,并提供了解决方案。

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

默认情况下是不允许跨域代用的。
什么是Access-Control-Allow-Origin
Access-Control-Allow-Origin是HTML5中定义的一种服务器端返回Response header,用来解决资源(比如字体)的跨域权限问题。
它定义了该资源允许被哪个域引用,或者被所有域引用(google字体使用*表示字体资源允许被所有域引用)。
 
由此可见,相同域必须满足协议相同、端口相同、域名相同. 只要其中一点不满足那就是跨域。
无论ajax是GET请求还是POST请求,Request Method都是OPTIONS。
mui ajax真机模拟不存在跨域问题,url的访问地址要是公网地址或与真机相连接的局域网地址(在手机浏览器上能够访问服务器的资源)。
jquery ajax的跨域问题常见的解决方法是jsonp
$.ajax('http://192.168.1.107:8080/test/test.do';,{
                             data:{
                                  username:username,
                                  password1:password1
                             },
                             
                             dataType:'jsonp',//服务器返回json格式数据
                             crossDomain: true,
                             jsonp: 'callback',
                             type:'POST',//HTTP请求类型
                             timeout:10000,//超时时间设置为10秒;
                             success:function(data){
                               if(data){
                                 alert("登录成功!");
                               }else{
                                 alert("登录失败!");
                               }
                                  
                             },
                             error:function(xhr,type,errorThrown){
                                  console.log(type);
                                  //alert(xhr);
                             }
                        }); 
后台
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       response.setHeader("Access-Control-Allow-Origin","*");
       response.setContentType("text/json; charset=utf-8");
       response.setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS,DELETE");
       response.setHeader("Access-Control-Max-Age","3600");
       response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
       String callback=request.getParameter("callback");
       if(null==callback){
         System.out.println("不是跨域请求");
       }else{
         System.out.println("是跨域请求");
       }
      
       PrintWriter out=response.getWriter();
          String userName=request.getParameter("username");
          String passWord=request.getParameter("password1");
          Map<String,String> map = new HashMap<String,String>();  
        map.put("result", "true"); 
          String jsonString="{\"a\":\"1\"}";
          if("123456".equals(userName) && "123456".equals(passWord)){
            //out.write(jsonString);
            out.println(callback+"("+jsonString+")");
          }else{
            //out.write(jsonString);
            out.println(callback+"("+jsonString+")");
          }
          out.flush();
          out.close();
     }

 

 

转载于:https://www.cnblogs.com/heyesp/p/10376399.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值