他的回复:
8.3 ~ 8.9 笔记ID: hw68436052jQuery官网:https://jquery.com宗旨:write less, do more"$"美元符号,表示jQuery的缩写压缩版本适用于上线产品非压缩版本适合调试,一般用于开发过程中在lesson目录下使用命令koa2 jquery创建jquery项目进去jquery目录,安装需要的包cd jqueynpm install安装完脚手架后,使用npm start启动服务将下载的jquery.js拷贝至jquery--public--javascripts目录下打开layout.pug,引入jquery.js文件,为了不影响前端性能,js的引入放到页面底端layout.pugdoctype html html head title= title link(rel='stylesheet', href='/stylesheets/style.css') body block content script(src='/javascripts/jquery-3.2.1.js') script(src='/javascripts/jq.js')index.pugextends layout block content 华为云在线教育平台当代码运行时,会先弹出alert,并且页面有字符串显示然后替换为classroom假如把引入的js放在头部doctype html html head title= title link(rel='stylesheet', href='/stylesheets/style.css') script(src='/javascripts/jquery-3.2.1.js') script(src='/javascripts/jq.js') body block content当代码运行时,页面只有弹出框点击确定后,显示字符串,想实现的功能(用classroom代替华为云在线教育平台)没实现原因是,当js文件加载时,html元素被阻塞,js文件找不到html对应标签要使得功能正常实现,我们需要对代码进行改写,意味着当dom准备完成后再执行function中的代码alert("我是jq") $(document).ready(function() { $("#name").html("classroom") })但是在代码执行过程中,只实现了替换,原始字符串并没有显示$(document).ready(function() { $("#name").html("classroom") })可以简写为$(function(){ $("#name").html("classroom") })常使用的发送AJAX的方法1、get方法$.get(url,data,callback,type)url是请求的接口地址data是请求的参数callback是请求成功时的回调函数type是请求返回数据的格式除了url,其他三个参数如果没有可以省略注意的地方:请求参数的格式可以是json对象,也可以是字符串返回的数据格式可以是:JSON、HTML、Script、XML、Text等例题:修改jq.js的代码$(document).ready(function() { $("#name").html("classroom") $.get('/ajax', function() { console.log(huawei) }, 'script') })在app.js中增加代码app.use(async function(ctx) { if (ctx.path == '/ajax') { ctx.body = "var huawei ='华为云在线教育'" } })2、post方法$.post(url,data,callback,type)url是请求的接口地址data是请求的参数callback是请求成功时的回调函数type是请求返回数据的格式除了url,其他三个参数如果没有可以省略注意的地方:post请求发出去的时候请求参数参数放在请求体中3、ajax方法ajax方法语法格式$.ajax(option)option是JSON格式的配置参数,用于设置ajax请求常用配置url:发送请求的地址type:请求方式(get or post等)data:请求参数dataType:返回的数据类型(json、html、xml等)success:请求成功后的回调函数error:请求失败后的回调函数complete:请求完成后的回调函数(不论成功与否都会执行)布尔类型的配置async:是否为异步请求cache:是否进行缓存(主要针对get请求)容易被忽视的配置项timeout:请求超时时间(毫秒)使用ajax方法实现上节的get方法修改jq.js代码$(document).ready(function() { $("#name").html("classroom") // $.get('/ajax', function() { // console.log(huawei) // }, 'script') $.ajax({ url: '/ajax', dataType: 'script', success: function() { console.log(huawei) } }) })登录页面案例1、在lesson目录下,输入koa2 login创建项目login2、cd login,使用npm install安装相应的npm包 //可以简写为npm i启动项目npm start编辑首页index.pugextends layout block content h1 登录华为账号 div 华为账号: input(type='text' id='account') div 账号密码: input(type='password' id='pwd') button(type='button' id='btn') 登录在public--javascripts目录下建立login.js文件,写入项目逻辑在layout.pug中引入js文件doctype html html head title= title link(rel='stylesheet', href='/stylesheets/style.css') body block content script(src='/javascripts/login.js')login.jsvar btn = document.getElementById("btn"); var account = ''; var pwd = ''; btn.onclick = function() { account = document.getElementById('account').value; pwd = document.getElementById('pwd').value ajax({ type: 'post', url: '/login', data: { account: account, pwd: pwd }, success: function(data) { //回调函数,登录成功后将服务器返回的数据弹出 alert(data) } }) } function ajax(opt) { var defaultParam = { type: 'get', url: '#', data: {}, async: true, success: function() {} } for (var key in opt) { defaultParam[key] = opt[key]; } //四步走 var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest } else { xhr = new ActiveXObject('Microsoft.XMLHTTP') } var paramStr = ""; for (var k in defaultParam.data) { paramStr += k + '=' + defaultParam.data[k] + '&'; } paramStr = paramStr.substr(0, paramStr.length - 1) if (defaultParam.type == 'get') { xhr.open(defaultParam.type, defaultParam.url + '?' + paramStr, defaultParam.async); xhr.send() } else { xhr.open(defaultParam.type, defaultParam.url, defaultParam.async); xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.send(paramStr) } xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200) { defaultParam.success(xhr.responseText); } } } }最后在服务器端app.js添加代码//接口请求 app.use(async function(ctx) { if (ctx.path == '/login') { if (ctx.request.body.account == 'zhang' && ctx.request.body.pwd == '123') { ctx.body = '登录成功!' } else { ctx.body = '登录失败!' } } })