• javascript 解决跨越问题


    在开发过程中, 跨越的问题, 或多或少总会遇到...那么该如何解决呢?
    因为相对来说还是比较常用的, 为了避免下次使用的时候, 不用再一顿百度....就记录一下吧...

    导致跨越问题的原因

    因为发送 ajax 请求必须遵循 同源策略, 所以就会出现跨越的问题
    同源策略就是: 域名 协议 端口 都必须相同

    解决跨越的方法

    • jsonp: 可以用原生js, 也可以使用第三方库(如: jQuery)
    • cors: 在服务端设置指定的响应头
    • nginx proxy: nginx 代理

    原生JavaScript方式:

    如果不行就请 设置响应头来解决跨域

    // client
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://localhost/test/index.php?callback=jsonpCallback";
    document.head.appendChild(script);
    function jsonpCallback(data) {
        console.log(data);
    }
    
    // server
    $json = json_encode(['name'=>'alex']);
    echo "{$_GET['callback']}({$json})"; // jsonpCallback({name:'alex'});
    

    此种方式,必须传递在请求参数中设置一个回调函数名, 然后在php端,用这个方法名包裹需要传递的数据

    使用 jQuery 提供的 $.getJSON 方法

    $.getJSON("http://localhost/test/index.php?callback=jsonpCallback", function (data) {
        console.log(data);
    });
    

    这种方式:回调方法名参数是可选的,默认就是 $.getJSON 中的第二个参数(闭包)

    使用 jQuery 提供的 $.ajax 方法

    $.ajax({
        url: "http://localhost/test/index.php",
        dataType: "jsonp",
        jsonp: "callback", // 指定回调方法名的key
        type: "get",
        data: {},
        success: function (data) {
            console.log(data);  // 默认是以success方法作为回调方法
        },
        error: function() {
            console.log("request error");
        }
    });
    

    此种方式, 默认是以 success 方法作为回调

    注意点: JSONP 只能发送 get 类型的请求, 就算在第三中方式中指定 type: "post" 但是还是会自动转换为get 类型的请求

  • 相关阅读:
    JavaScript学习总结(十一)——Object类详解
    在mysql命令行下执行sql文件
    canal HA配置
    canal 常用配置
    canal 监控数据库表 快速使用
    HashMap 因子对性能的影响
    JVM 调优
    JVM jstat 详解
    Tomcat 异常关闭排查
    Mysql canal 监控数据变化
  • 原文地址:https://www.cnblogs.com/liaohui5/p/10581592.html
Copyright © 2020-2023  润新知