zoukankan      html  css  js  c++  java
  • 跨域

    同源策略

    1、同源策略是浏览器的一种安全策略,所谓同源指的是请求URL地址中的协议、域名和端口都相同,只要其中之一不相同就是跨域

    2、同源策略主要为了保证浏览器的安全性

    3、在同源策略下,浏览器不允许Ajax跨域获取服务器数据

    script跨域

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>script跨域</title>
        <script src="http://tom.com/data.php"></script>
        <script type="text/javascript">
            console.log(data.username); //zhangsan
            console.log(data.password); //12456
        </script>
    </head>
    <body>
    
    </body>
    </html>
    
    

    php文件

    <?php
    	$arr = array("username"=>"zhangsan", "password"=>"123456");
    	echo "var data =".json_encode($arr);
    
    ?>
    
    
    script标签的async属性

    script标签里面的async属性表示异步加载资源,默认情况下是同步加载

    这种方式存在的两个主要的问题:
    1、必须保证加载的顺序
    2、不方便通过程序传递参数
    

    动态创建script

    动态创建script标签发出去的请求是异步请求,而且不能修改;

    服务器响应的内容是【函数调用】 foo(实参)

    php代码

    <?php
      	$arr = array("username"=>"zhangsan", "password"=>"123456");
      	$cb = $_GET['_cb'];
        $username = $_GET['username'];
        $pwd = $_GET['password'];
        echo $cb.'('.'{"username":"'.$username.'", "password":"'.$pwd.'"}'.')';
    ?>
    

    js代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript">
            /*
            hello就是回调函数
            这就是jsonp的本质:动态创建script标签,然后通过它的src属性发送跨域请求,然后服务器端响应的数据格式为【函数调用(foo(实参))】,所以在发送请求之前必须先声明一个函数,并且函数的名字与参数中传递的名字要一致。这里声明的函数是由服务器响应的内容(实际就是一段js代码-函数调用)来调用
            */
            function hello(data){
                console.log(data);
            }
            var script = document.createElement('script');
            script.src = 'http://tom.com/data.php?_cb=hello&username=zhangsan&password=123';
            var head = document.getElementsByTagName('head')[0];
            head.appendChild(script);
    
            
        </script>
    </head>
    <body>
        
    </body>
    </html>
    
    

    jquery使用jsonp

    php代码

    <?php
          $arr = array("username"=>"zhangsan", "password"=>"123456");
          $cb = $_GET['cb'];
          echo $cb.'('.json_encode($arr).')';
      
    ?>
    
    

    js代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>jsonp</title>
        <script src="jquery/jquery-3.3.1.min.js"></script>
        <script>
            $(function () {
                $("#btn").click(function () {
                    $.ajax({
                        type: "get",
                        url: "http://tom.com/jsonp.php",
                        dataType: "jsonp",
                        jsonp: 'cb',  //jsonp属性的作用就是自定义参数名字(默认是callback), callback=abc 相当于等号前面
                        jsonpCallback: "abc", //自定义回调函数的名字, callback=abc, 相当于等号后面
                        data: {},
                        success: function (data) {
                            alert(data.username);
                        },
                        error: function (data) {
                            console.log(data);
    
                        }
                    })
                });
            })
        </script>
    </head>
    <body>
        <input type="button" value="点击" id="btn">
    </body>
    </html>
    
    

    基于百度接口的智能搜索框

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .container{
                background-color: antiquewhite;
                400px;
                height: 300px;
                padding: 10px;
                margin: 0 auto;
            }
        </style>
    </head>
    <body>
    
    <div class="container">
        <input type="text" id="keyword">
        <input type="button" value="搜索">
        <div id="msg"></div>
    </div>
    
    </body>
    <script src="jquery/jquery-3.3.1.min.js"></script>
    <script>
        $(function(){
            $("#keyword").keyup(function () {
                var kw = $(this).val();
                $.ajax({
                    url:'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
                    data: {wd:kw},
                    jsonp : 'cb',
                    dataType: 'jsonp',
                    success: function (data) {
                        var msg = data.s;
                        var tag = '<ul>';
                        $.each(msg, function (i ,e) {
                            tag += "<li>"+ e+"</li>";
                        });
                        tag += "</ul>";
                        $("#msg").html(tag);
                    }
    
    
                })
            });
        })
    </script>
    </html>
    
    
  • 相关阅读:
    Java基础知识强化97:final、finally、finally区别
    Java基础知识强化之集合框架笔记02:集合的继承体系图解
    Java基础知识强化之集合框架笔记01:集合的由来与数组的区别
    Java基础知识强化96:Calendar类之获取任意年份的2月有多少天的案例
    Java基础知识强化95:Calendar类之Calendar类的add()和set()方法
    Gym
    Gym
    Good Bye 2015 B. New Year and Old Property —— dfs 数学
    HDU1873 看病要排队 —— 优先队列(STL)
    HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
  • 原文地址:https://www.cnblogs.com/Jason-lin/p/9482122.html
Copyright © 2011-2022 走看看