zoukankan      html  css  js  c++  java
  • ajax解决跨域问题

    1.在介绍之前先介绍几个概念

    json:

    {
         date: "Sun Dec 24 21:44:42 CST 2017", 
         temperature: "21",
         humidity: "15"
    }

    jsonp:

    callback({
          date: "Sun Dec 24 21:44:42 CST 2017",
          temperature: "21", 
          humidity: "15"
    })

    所以在后台传数据的时候就要根据类型来传递相应的数据格式。

    2.ajax的前生今世

    大家都知道ajax不是一种新语言,而是在JS上进行封装,实现更好的对dom节点的操纵。在它的1.4版本后,对json的格式更加要求了,这里列出它对后台数据的请求:

    $.ajax({
              type: "get",
              url: "http://localhost/args",
              async: true,  
              dataType: "json",  
              success: function (data) {
                console.log(data);
              },
              error:function(){
                console.log("fail");
              }
         });

    如果你用上面的方式请求你的接口,出现这样的问题:

    No 'Access-Control-Allow-Origin' header is present on the requested resource.

    你网上搜了一下,把dataType: "json"改为“jsonp”,如果你的问题彻底解决了,那恭喜你,如果你只是在chrome控制台看不到这个错误了,但是数据明明可以在通过URL获取到,但是就是不进入success: function(data){}方法中,而是执行error中的语句。你网上又搜了一下,找到了原因是ajax在1.4版本对json的格式严格,你看了看,自己的json格式是完全准确的,但为什么还是执行error方法中的语句?

    这里就要看看我在1中说的概念,你把dataType改成“jsonp”,你就得在服务端把数据改成jsonp的格式,这时候你的问题算是彻底解决了。

    但是你发现你的服务端的数据格式不是说改就能改的,你又陷入了沉思。。。。。问题相当于没解决,又回到起点。MLGB

    3.服务端的解决方案

    如果你用的SpringBoot,那么问题就好解决了,你需要在你的Controller目录加上这个:

    import org.springframework.context.annotation.Configuration;    
    import org.springframework.web.servlet.config.annotation.CorsRegistry;    
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;    
      
    @Configuration    
    public class CorsConfig extends WebMvcConfigurerAdapter {    
      
        @Override    
        public void addCorsMappings(CorsRegistry registry) {    
            registry.addMapping("/**")    
                    .allowedOrigins("*")    
                    .allowCredentials(true)    
                    .allowedMethods("GET", "POST", "DELETE", "PUT")    
                    .maxAge(3600);    
        }    
      
    } 

    问题就解决了。

    如果你用的是MVC的框架或者你没用框架,那么问题也好解决,大家在服务器返回数据的时候借助工具来JSON化数据。

    4.闲聊

    jsonp和服务器端改变数据的类型都可以解决问题。

    我们来说说他们的优缺点,前一种只能get,且数据格式不是标准的json格式,解决问题治标不治本,后一种没什么缺点

    --------2017.12.24    兰州

    平安夜,祝愿全世界的人都平平安安

  • 相关阅读:
    [ Algorithm ] N次方算法 N Square 动态规划解决
    [ Algorithm ] LCS 算法 动态规划解决
    sql server全文索引使用中的小坑
    关于join时显示no join predicate的那点事
    使用scvmm 2012的动态优化管理群集资源
    附加数据库后无法创建发布,error 2812 解决
    浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法
    windows 2012 r2下安装sharepoint 2013错误解决
    sql server 2012 数据引擎任务调度算法解析(下)
    sql server 2012 数据引擎任务调度算法解析(上)
  • 原文地址:https://www.cnblogs.com/huhu1203/p/8099780.html
Copyright © 2011-2022 走看看