美文网首页菜鸟前端工程师程序员
JavaScript学习笔记031-本地存储0jsonp

JavaScript学习笔记031-本地存储0jsonp

作者: Mr柳上原 | 来源:发表于2018-11-21 16:51 被阅读22次

    Author:Mr.柳上原

    • 付出不亚于任何的努力
    • 愿我们所有的努力,都不会被生活辜负
    • 不忘初心,方得始终

    能把爱好和工作结合起来

    是一件幸福的事情

    经过这么多年的挫折

    还好现在找到了

    前端

    我很爱你!

    工作

    我很爱你!

    <meta charset="utf-8">
    
    <!DOCTYPE html> <!-- 文档类型:标准html文档 -->
    
    <html lang='en'> <!-- html根标签 翻译文字:英文 -->
    
    <head> <!-- 网页头部 -->
    
    <meat charset='UTF-8'/> <!-- 网页字符编码 -->
    
    <meat name='Keywords' content='关键词1,关键词2'/>
    
    <meat name='Description' content='网站说明'/>
    
    <meat name='Author' content='作者'/>
    
    <title>前端59期学员作业</title> <!-- 网页标题 -->
    
    <link rel='stylesheet' type='text/css' href='css/css1.css'/> <!-- 外链样式表 -->
    
    <style type='text/css'> /*内部样式表*/
    
    </style>
    
    </head>
    
    <body> <!-- 网页主干:可视化区域 -->
    
    <script>
    
    /*
    
    本地存储:
    
    localStorage 永久存储
    
    sessionStorage 浏览器关闭时清空
    
    */
    
    // localStorage
    
    // 设置localStorage的值
    
    localStorage.setItem("fengyu", "dashuaibi"); // 参数为key,value,参数只能传字符串形式
    
    // 本地存储查找
    
    Application -> Storage
    
    // 本地存储实例
    
    // 电子记事本
    
    .done{} // 数据的css样式
    
    // 设计可遍历的数据结构
    
    [
    
    {
    
    content: "", // 内容
    
    done: false // 状态
    
    }
    
    ]
    
    const ipt = document.getElementById("ipt"); // 输入表单
    
    const list = document.getElementById("list"); // 输出备忘栏(<ul>)
    
    const data = localStorage.getItem("todolist"); // 查询本地存储
    
    // 判断是否有值
    
    if (data === null){ // 没有写入数据时
    
    localStorage.setItem("todolist", "[]"); // 设置本地存储的参数
    
    } else { // 有数据时
    
    JSON.parse(data).forEach((v, i, self) => {
    
    list.innerHTML += `<li class=${v.done ? "done" : ""}>${v.content}<span>X</span></li>`
    
    })
    
    }
    
    // 回车添加内容
    
    ipt.onkeydown = function (e){
    
    // 判断键盘的键值
    
    if (e.keyCode !== 13) return;
    
    // 回车后获取输入的值
    
    const val = this.value.trim();
    
    // 判断输入的内容
    
    if (!val) return;
    
    // 添加数据
    
    const data = JSON.parse(localStorage.getItem("todolist")); // 防止数据覆盖,先取出之前的数据,然后再加上现有写入的数据
    
    list.inneHTML += `<li>${val}<span>X</span></li>`
    
    // 更新本地存储
    
    data.push({
    
    content,
    
    done: false
    
    });
    
    // 写入本地存储
    
    localStorage.setItem("todolist", JSON.stringify(data));
    
    // 清空输入框
    
    this.value = "";
    
    }
    
    // 删除数据事件
    
    list.addEventListener("click", e => {
    
    const that = e.target;
    
    const data = localStorage.getItem("todolist");
    
    e.stopPropagation();
    
    const tagName = that.tagName.toLowerCase();
    
    switch (tagName){
    
    case "span":
    
    data.forEach(function(v, i, self){
    
    if (this === list.children[i]){
    
    list.removeChild(this);
    
    self.splie(i, 1);
    
    }
    
    }, that.parentNode); // forEach回调函数的this指向
    
    break;
    
    case "li":
    
    data.forEach(function(v, i, self){
    
    if (that === list.children[i]){
    
    v.done = !v.done;
    
    that.classlist.toggle("done");
    
    }
    
    })
    
    break;
    
    // 没有default
    
    }
    
    localStorage.setItem("todolist", JSON.stringify(data));
    
    });
    
    /*
    
    jsonp:
    
    json的一种使用模式
    
    跨域获取数据的方式
    
    script的src属性具有跨域请求资源的能力
    
    scr与json配合的模式就是就是jsonp
    
    */
    
    // src默认get请求
    
    // src里网站的查询字段里输出cb的值
    
    // 后端拿到cb值,返回相应的值名与数据
    
    src="[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)"
    
    cb=fy
    
    const cb = ctx.query.cb; // nodejs后端查询命名
    
    ctx.type = "text/javascript";
    
    ctx.body = `${cb}({a: "这是后端朋友传过来的数据"})`;
    
    fy({
    
    JSON: "后端返回的数据"
    
    }) // 格式
    
    // 前端定义一个fy函数,就能取到后端发来的值
    
    function fy(obj){
    
    console.log(obj); // obj = {a: "这是后端朋友传过来的数据"};
    
    }
    
    // 如果当前端需要触发某些方法时再拿到数据
    
    document.onclick = function (){ // 点击事件触发时创建script标签进行跨域操作
    
    const script = document.createElement("script");
    
    script.src = "[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)";
    
    document.body.appendChild(script);
    
    }
    
    </script>
    
    // script的src属性
    
    <script src="[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)"></script>
    
    </body>
    
    </html>
    
    

    相关文章

      网友评论

        本文标题:JavaScript学习笔记031-本地存储0jsonp

        本文链接:https://www.haomeiwen.com/subject/bwvcqqtx.html