zoukankan      html  css  js  c++  java
  • html 中的<script>标签

    https://www.w3.org/TR/html51/semantics-scripting.html#the-script-element

    一、

    <script type='text/javascript'>

    function ...

    </script>

    二、

    <script type='text/javascript' src='js/a.js'>

    </script>

     

    本质都是包含js代码,第一个是自己写,第二个是引用。

    属性type规定脚本MIME类型。

    MIME类型由两部分构成:媒介类型和子类型。

    三、

    什么是 jsonp ?

    jsonp.php

    <?php
    header('Content-type: application/json');
    //获取回调函数名
    $callback = htmlspecialchars($_REQUEST ['callback']);
    //json数据
    $json_data = '["Cat","Dog"]';
    //输出jsonp格式的数据
    echo $callback . "(" . $json_data . ")";
    ?>

    test.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>JSONP 实例</title>
    </head>
    <body>
    <script type="text/javascript">
        function foo(result){
            for(k in result){
                alert(result[k]);
            }
        }
    </script>
    <script type="text/javascript" src="http://localhost/bui/test/jsonp.php?callback=foo"></script>
    </body>
    </html>

    <script type="text/javascript" src="http://...  就会执行foo方法 ,传入的参数是 json 对象 ,这样就实现了跨域传输数据

    注:<script> 出现的位置是有先后顺序的

    会报错

     原理就是通过 src 引入 js 片段,但是存在安全问题

    四、局限性

    ① 只支持get请求

    ② 后端需要返回application/javascript;charset=UTF-8

    ③ 可能需要access_token

     ④ 需要解决<script> 只加载一次的问题 

    <html>
    <head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script type="text/javascript">
        function clickme() {
            jsonp('http://localhost:8080/name?callback=foo');
        }
        function foo(data) {
            console.log(data.name);
        }
        function jsonp(src) {
            $("#jsonp").remove();
            $("head").append('<script id="jsonp" type="text/javascript" src="'+src+'"></script>');
        }
    </script>
    
    </head>
    <body>
        <input type="button" value="点我" onclick="clickme()" />
    </body>
    </html>
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alibaba.fastjson.JSONObject;
    
    @RestController
    public class JSONP {
    
        
        @RequestMapping(value = "/name", method = RequestMethod.GET, produces = {"application/javascript;charset=UTF-8" })
        public String foo(@RequestParam String callback) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("name", "找那个酸奶");
            return callback + "(" + jsonObject.toJSONString() + ")";
        }
    }

     

  • 相关阅读:
    C语言学习之我见-strcpy()字符串复制函数
    豆邮windows客户端(第三方)开发详解
    项目管理的主要控制因素(转)
    daterangepicker -- bootstrap日期时间范围插件使用分享
    Jacob
    Selenium
    基本套接字总结(@function)
    Python字符串处理NoneType的处理
    机器学习相关会议(转载)
    jboss-AS目录结构了解(资料摘取)
  • 原文地址:https://www.cnblogs.com/zno2/p/4495137.html
Copyright © 2011-2022 走看看