AJAX 是Asynchronous JavaScript And XML
的缩写。
它不是一种编程语言。它是一种基于HTML、CSS、JavaScript 和 XML
,让开发更好、更快和更有互动的 Web 应用的技术。
前后端交互就是前端与后端的一种通讯方式,主要使用的技术栈就是ajax (async javascript and xml
使用 ajax 技术网页应用能够快速的将新内容呈现在用户界面,并且不需要刷新整个页面, 也就是能够让页面有 "无刷更新" 的效果
注意点
前后端交互只能交互字符串,并且有自己的固定步骤
const xhr = new XMLHttpRequest()
// xhr.open('请求的方式', '请求的地址', 是否异步)
xhr.open('GET', 'http://localhost:8888/test/first', true)
xhr.send()
xhr.onload = function () {
console.log('请求回来了~~~~~~~~')
console.log(xhr.responseText)
}
简单来说其实就是用一个数字表明了当前 ajax 运行到哪一步了
语法: xhr.readyState
0: 创建 ajax 成功
1: 当前 ajax 配置成功
2: 当前 ajax 发送成功(响应已经回到浏览器了)
3: 表示浏览器当前正在解析本次响应, 但可能还没完成
4: 表示浏览器已经完成解析本次响应, 可以正常使用 responseText 了
0 和 1, 比较好打印, 2/3/4 这几个我们可以借助一个事件去打印
通过事件名其实就可以看出, 当 readyState 发生改变时就会执行
const xhr = new XMLHttpRequest()
console.log(xhr.readyState) // 0
xhr.open('GET', 'http://localhost:8888/test/first', true) console.log(xhr.readyState) // 1
xhr.onreadystatechange = function () {
if (xhr.readyState === 2) console.log(xhr.responseText)
if (xhr.readyState === 3) console.log(xhr.responseText)
if (xhr.readyState === 4) console.log(xhr.responseText)
}
xhr.send()
○表示向服务器获取资源
表示向服务器提交信息,通常用于产生新的数据,比如注册
表示希望修改服务器的数据, 通常用于修改某数据
表示希望删除服务器的数据
发生在跨域的预检请求中,表示客户端向服务器申请跨域提交
直接拼接在请求路径后, 以 ? 间隔, 使用 key=value 的形式书写, 当有多个参数的时候用 & 连接
const xhr = new XMLHttpRequest()
xhr.open('GET', 'http://localhost:8888/test/third?name=QF666&age=18') xhr.send()
xhr.onload = function () {
let res = JSON.parse(xhr.responseText)
console.log(res) }
在请求体内携带参数(其实就是 send 小括号内部)
并且需要设置请求头内部的 content-type
■ 如果参数为 查询字符串, 需要添加:
● 'xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')'
■ 如果参数为 JSON 字符串, 需要添加:
● 'xhr.setRequestHeader('content-type', 'application/json')'
const xhr = new XMLHttpRequest()
xhr.open('POST', 'http://localhost:8888/test/fourth')
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
xhr.send('name=QF666&age=18')
xhr.onload = function () {
let res = JSON.parse(xhr.responseText)
console.log(res)
}
a.GET: 直接在地址后面书写
b.POST: 在请求体内书写
a.GET: 2kb(左右)
b.POST: 原则上不限制大小, 但是服务器可以做出限制
a.GET: 只能携带查询字符串格式
b.POST: 原则上不限制格式, 但是需要在请求报文的 content-type 做出配置
a.GET: 明文发送, 相对不安全
b.POST: 暗文发送, 相对安全
由于内容比较多,我们Ajax分为上下两部分内容,以上就是我们JavaScript讲解Ajax上部分的内容啦,下期精彩继续!大家可以持续关注~
更多技术类内容,点我主页查看
在面试的过程中,可能也会被问到对虚拟dom的理解,像这种面试题是比较宽泛的,面试官想知道你到底知道多少?既然是理解,那就只能是知无不言言无不尽,尽量组织下语言多说点,这样才显得专业素养比较高,接下来,我来谈谈自己的理解,切记不要去背,一定要理解之后,用自己的语言来描述出来。我们可以从以下四个方面来回答:?什么是虚拟dom虚拟dom本质上就是一个普通的JS对象,用来描述视图上应该有哪些界面结构,并不生成界面。我们可以在生命周期「mounted阶段」打印一下this._vnode,如下:描述了标签为div、有哪些属性、以及有哪些子元素等等,它通过普通的js对象这种形式来描述页面上应该有哪些东西,但并不会生成界面。在vue中,每个组件都有一个render函数,每一个render函数都会返回一个虚拟dom数,这也就意味着每个组件都对应一棵虚拟DOM树。?为什么需要虚拟dom这个主要是由vue框架结构所决定的,在vue中,渲染视图会调用render函数,这种渲染不仅发生在组件创建时,而且还会发生在依赖的数据更新的时候。如果在渲染时,直接使用真实DOM,由于真实DOM的创建、更新、插入等操作会带来
展开 var__INLINE_SCRIPT__=function(){"usestrict";vare=function(e,a){functiont(e,a){vart=e.match(newRegExp(a+"\\s*=\\s*[\"']?([^\"'\\s>]+)[\"']?"));returnt&&t[1]}e=a?window.__emojiFormat(function(e){vara;e=e.split(/(<a\s+\w[^>]*>)(.*?)(<\/a>)/);for(vari=0;i<e.length;i++)if(i%4==1){a=!1;varn=t(e[i],"href");/^https?:\/\/mp\.weixin\.qq\.com/.test(n)&&(a=!0);vars='<atarget="_blank"data-hre
基础知识权限的概念权限是指为了保证职责的有效履行,任职者必须具备的对某事项进行决策的范围和程度。它常常用“具有xxxxxxx的权利”来进行表达,比如:公司的CEO具有否定某项提议的权利。站在合约的管理角度来讲,智能合约中的用户可以分为合约的owner、合约的普通用户两类。合约的owner是合约的拥有者,他可以执行合约中所有的函数;合约的普通用户可以执行合约中约定范围内的函数,对于一些对权限有校验或对执行者身份有要求的函数(比如:用onlyowner修饰器修饰的函数)是无法执行的。函数可见性solidity使用了public、private、internal、external来对函数的可见性进行限定,下面进行简单的介绍:public使用public限定的函数可以被合约内部函数、继承合约、外部合约调用pragmasolidity^0.4.26; contractFunctionTest{ //合约的构造函数 constructor()public{ } //函数默认的可见性状态为public functionFunc(){} //使用public修饰的函数可以被合约内部的其他函数
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。 今天和大侠简单聊一聊基于FPGA的图像处理,之前也和各位大侠聊过相关的图像处理,这里面也超链接了几篇,具体如下:图像边缘检测算法体验步骤(Photoshop,Matlab)算法系列:基于FPGA的图像边缘检测系统设计(sobel算法)FPGA设计中VerilogHDL实现基本的图像滤波处理仿真基于FPGA的类脑计算平台—PYNQ集群的无监督图像识别类脑计算系统需要的可以参考一下,欢迎一起交流学习。话不多说,上货。 使用FPGA做图像处理优势最关键的就是:FPGA能进行实时流水线运算,能达到最高的实时性。因此在一些对实时性要求非常高的应用领域,做图像处理基本就只能用FPGA。例如在一些分选设备中图像处理基本上用的都是FPGA,因为在其中相机从看到物料图像到给出执行指令之间的延时大概只有几毫秒,这就要求图像处理必须很快且延时固定,只有FPGA进行的实时流水线运算才能满足这一要求。所以要了解FPGA进行图像处理的
css怎么让图片变暗?下面本篇文章就来给大家介绍一下使用CSS让图片变暗的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。在CSS中,可以利用滤镜filter属性,通过设置filter属性为brightness(%)和contrast(%)来让图片变暗。filter 属性定义了元素(通常是<img>)的可视效果(例如:模糊与饱和度)。语法:filter:none|blur()|brightness()|contrast()|drop-shadow()|grayscale()|hue-rotate()| invert()|opacity()|saturate()|sepia()|url();复制提示:使用空格分隔多个滤镜。注意:滤镜通常使用百分比(如:75%),当然也可以使用小数来表示(如:0.75)。首先,我们先建立一个demo,代码如下:<!DOCTYPEhtml> <html> <head> <metacharset="UTF-8"> <title>css3f
01概念在Go语言中,reflect可以用来在运行期间获取对象的类型信息和内存结构,reflect操作所需的全部信息都源自接口变量,接口变量除了存储自身类型外,还会保存实际对象的类型数据。reflect通过TypeOf和ValueOf函数,将任何传入的对象转换为接口类型。02 使用反射获取对象的类型TypeOfreturnsthereflectionTypethatrepresentsthedynamictypeofi.Ifiisanilinterfacevalue,TypeOfreturnsnil.funcreflect.TypeOf(iinterface{})reflect.Type复制获取对象的类型信息: 输出结果:gorunmain.go Aint复制需要注意的是,Name是真实类型,Kind是真实类型的基础结构类别。在类型判断时要注意区分。 传入的参数对象区分基类型和指针类型 示例代码:输出结果:gorunmain.go int*intfalseint intptr true复制代码中,我们使用Elem方法返回指针的基类型,此外,Elem方法还可以返回数组、slice、map
作者:叶瑞典团队:数据中台一、大数据环境下的有赞数仓关于数据仓库,在维基百科中将它定义为用于报表和数据分析的系统,是商务智能BusinessIntelligence的核心部分。在数据仓库诞生之初,它只被设计成面向管理层所需要的决策支持系统,并不对业务方(这里指各应用系统)提供数据支持。然而在大数据环境的背景下,当Hadoop生态已然成为大数据现实意义上的载体,以Hive为基础的数据仓库已经不能仅仅只提供决策支持的需求了——它需要同时满足某些业务上对数据的统计需求。因此,当下的数据仓库应该有一个新的定义:大数据环境下的数据仓库是指对全局数据(包含时间和空间:历史的以及所有业务部门的)的存储及使用的一整套方法论。有赞的数据仓库就是在这样一个大数据环境下,同时需要满足内部分析数据和商家侧数据的各类需求。二、发展历程有赞的数据仓库经历了混沌期、建设期,目前在成熟期中蜕变着……2.1混沌期2.1.1背景在有赞大数据的初期,严格来说是没有数仓概念的:没有分层,没有主题域,也没有规范。当整个Hive里就只有一个st库,并且不做规范性命名的时候,便会出现两个同名的mysql表先后导入同一个库,后者把前
1.航摄比例尺根据武汉大学《摄影测量学》中的定义:航摄比例尺是航摄影像上一线段l与相应地面线段L的水平距离之比:这里的m就是航摄比例尺的分母,f为摄像机主距(焦距),H为平均高程面的摄影高度或者航高。这里的航高一般为相对于某一水准面的相对航高。2.成图比例尺翻了很多资料,这个成图比例尺基本上都是直接被提出来的,应该表示的就是比例尺本身的含量,即地图上1单位长度实际代表的同等单位的长度。成图比例尺与航摄比例尺之间存在着相应的关系: 我查阅了很多资料,成图比例尺beishu对应的航摄比例尺区间都不是很一致,只能说大致差不多。我这里截的是注测教材《测绘综合能力》上的表格。可以看到摄影比例尺与成图比例尺,随着比例尺的缩小,最开始是3~4倍关系,最后会逐渐接近。3.地面分辨率对于航空数字影像而言,影像分辨率通常是指地面分辨率,也就是影像上一个像素所代表的地面的大小,也可以叫做地面采样间隔(GSD),单位为米/像素。成图比例尺与地面分辨率的关系为: 根据我的计算,这个关系其实是推算出来的,例如我这里推算1:1000比例尺对应的0.1米的分辨率:数字影像上1像素代表0.1米; 将数字影像打印成地图,
新文创新实验云南与腾讯发布新文旅IP战略合作计划5月21日下午,主题为“智慧旅游让生活更美好”的2019云南国际智慧旅游大会在昆明召开。云南省与腾讯共同发布“云南新文旅IP战略合作计划”,将利用“新文创”打造新型数字文旅模式、释放文旅新动能。这是国家层面推动文旅融合发展后,首个省级文旅融合实践;也是腾讯提出“新文创”战略以来,首个立足一个省份的落地实践。这一战略合作,立足于腾讯“新文创”的战略指导与业务资源,在“一部手机游云南”智慧旅游项目的成功基础上,腾讯进一步参与到云南省级文旅IP的建设中(点击这里了解详情)。川投信产牵手腾讯云布局智慧文旅共建四川全域旅游智慧平台5月21日-23日,2019腾讯全球数字生态大会在云南昆明举行。在22日举行的智慧文旅专场上,四川省属国有企业川投集团全资子公司四川省川投信息产业有限责任公司(以下简称川投信产)与腾讯云计算(北京)有限责任公司(以下简称腾讯云)在云南昆明签署战略合作协议,共同在川布局智慧文旅,加速四川文旅信息化建设,助力四川文旅产业转型升级。 看优势,川投信产的一些下属公司在智慧文旅、遗址监测、文物保护等领域深耕多年,曾参与了青城山-都
7月底,易凯资本王冉一篇《我们对当下中国资本市场温度的一些感知》的文章,在行业内广泛传播,在这篇文章中,王冉首先就给出了一个充满绝望感的结论:“市场在变得更好之前一定会变得更坏,这一点毫无疑问。”他认为,一级市场的人民币和美元都变少了,创业者融资会日益艰难,看似繁荣的上市潮,不是为了割韭菜,而是拿韭菜盒子当活命干粮。同时他还给出了一个论断:“今天所有新模式下的新公司三四年后都会变成传统公司,因此它们的估值逻辑在那个时候必须回归传统产业的估值逻辑(对很多行业来说这意味着15-30倍的市盈率)。” 能够印证王冉判断的是,新经济公司上市后破发成为新常态,甚至包括腾讯、小米这样的超级明星公司,股价也遇到增长压力,还有很多中概股股价跌回一年前,甚至更低,这与公司业务本身有关系,然而大环境的变化也不是没有影响,如今中概股,市盈率超过40就是高的,一年前却是稀疏平常。一级市场同样在发生着很大的变化,创业公司融资消息早已不如前几年密集,前段时间,一个在VC工作的朋友带着团队加入某独角兽公司,原因是VC募资很难,他们干不下去了,有数据显示2018年4月在中国完成募资的VC/PE数量同比下降69.41%,
Oracle11g中对于归档日志的删除,除了遵循RMAN保留策略外,也可以通过RMAN来配置归档日志的删除策略,也就是归档日志何时可以被删除。归档日志删除策略适用于所有归档位置(使用快速闪回区FRA/不使用FRA)。本文主要描述归档日志删除策略并给出了具体的演示。 1、关于归档日志删除策略 也就是哪些归档日志符合删除策略能够被删除,如前所述,归档位置适用于所有归档位置(使用快速闪回区FRA/不使用FRA) 当启用该策略后,如归档日志存在于FRA中,则Oracle会尽可能根据保留他们,一旦FRA空间告急,则Oracle会根据归档日志删除策略自动删除 对于不在FRA中的归档日志,需要手动使用deleteobsolete或deletearchivelog方式来删除日志 无论归档日志存在于FRA内或外,都可以通过BACKUP...DELETEINPUTorDELETEARCHIVELOG方式来删除 该策略不适用于使用LogMiner方式从主数据库传送到逻辑standby生成的外部归档日志文件,因为这些日志文件不能够在逻辑stand
继续url_for的知识点#coding:utf-8 fromflaskimportFlask,url_for importflask app=Flask(__name__)#type:Flask app.debug=True #根目录 @app.route('/') defhello_world(): return'HelloWorld!' @app.route('/login/<page_id>/') deflogin(page_id): returnu'登录页面' @app.route('/list/') defmylist(): returnurl_for('login',page_id=1,title_id=2) if__name__=='__main__': app.run()复制现在我们在mylist函数中的url_for多传一个参数,这时候会返回什么结果呢,执行代码可以看到:看上面的代码,如果现在我想在lo
一、BasicAndroidRE1 https://ctflearn.com/challenge/962 没啥特别说明,只说了这是一个apk文件,让你自己找乐子,OK,先下载文件: https://ctflearn.com/challenge/download/962 或是从我的GitHub下载: https://github.com/CC11001100/Android-RE-attachment-netdisk/blob/master/cnblogs/13974682/BasicAndroidRE1.apk 下载完之后二话不说先拖到jeb看下: 项目结构看起来很简单。嗯?似乎依赖了apache-codec库?不知道有啥猫腻,反编译MainActivity看下: packagecom.example.secondapp; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.EditText; importandroid.widget.TextView; importandroidx.app
usb虚拟网卡与串口 依赖的驱动模块 #usb cp/work/code/kernel_gitee/kernel_imx/fs/configfs/configfs.ko./fixShell/so/ cp/work/code/kernel_gitee/kernel_imx/drivers/usb/gadget/libcomposite.ko./fixShell/so/ #网络 cp/work/code/kernel_gitee/kernel_imx/drivers/usb/gadget/function/u_ether.ko./fixShell/so/ cp/work/code/kernel_gitee/kernel_imx/drivers/usb/gadget/function/usb_f_rndis.ko./fixShell/so/ cp/work/code/kernel_gitee/kernel_imx/drivers/usb/gadget/function/usb_f_ecm.ko./fixShell/so/ cp/work/code/kernel_gitee/kernel_i
一、引言(Introduction) 1.1欢迎 1.2机器学*是什么? 1.3监督学* 1.4无监督学* 二、单变量线性回归(LinearRegressionwithOneVariable) 2.1模型表示 2.2代价函数 2.3代价函数的直观理解I 2.4代价函数的直观理解II 2.5梯度下降 2.6梯度下降的直观理解 2.7梯度下降的线性回归 2.8接下来的内容 三、线性代数回顾(LinearAlgebraReview) 3.1矩阵和向量 3.2加法和标量乘法 3.3矩阵向量乘法 3.4矩阵乘法 3.5矩阵乘法的性质 3.6逆、转置 第1周 引言(Introduction) 1.1欢迎 参考视频:1-1-Welcome(7min).mkv 第一个视频主要讲了什么是机器学*,机器学*能做些什么事情。 机器学*是目前信息技术中最激动人心的方向之一。在这门课中,你将学*到这门技术的前沿,并可以自己实现学*机器学*的算法。 你或许每天都在不知不觉中使用了机器学*的算法每次,你打开谷歌、必应搜索到你需要的内容,正是因为他们有良好的学*算法。谷歌和微软实现了学*算法来排行网页每次
C 树的性质是点-边=1 森林联通块计数都可以这么做所以直接维护前缀和再把边界处理一下就好了 //LoveandFreedom. #include<algorithm> #include<cstring> #include<cmath> #include<cstdio> #defineinf20021225 #definelllonglong #defineN2100 usingnamespacestd; intread() { intf=1,s=0;charch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar(); returnf*s; } inta[N][N],p[N][N],e[N][N],hp[N][N],lp[N][N],n,m;charch[N]; intmain() { n=read(),m=read();i
语法为: 参数=>函数体 基本用法: varf=v=>v; //等价于 varf=function(a){ returna; } f(1);//1复制 当箭头函数没有参数或者有多个参数,要用()括起来。 varf=(a,b)=>a+b; f(6,2);//8 当箭头函数函数体有多行语句,用{}包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略{},结果会自动返回。 varf=(a,b)=>{ letresult=a+b; returnresult; } f(6,2);//8 当箭头函数要返回对象的时候,为了区分于代码块,要用()将对象包裹起来 //报错 varf=(id,name)=>{id:id,name:name}; f(6,2);//SyntaxError:Unexpectedtoken: //不报错 varf=(id,name)=>({id:id,name:name}); f(6,2);//{id:6,name:2}复制 作者:听着music睡 出处:http://www.c
按照上表的OpenCV(Python)代码↓↓↓ #定义HSV颜色范围 #红 minRed1=np.array([0,43,46]) maxRed1=np.array([10,255,255]) minRed2=np.array([156,43,46]) maxRed2=np.array([180,255,255]) #橙 minOrange=np.array([11,43,46]) maxOrange=np.array([25,255,255]) #黄 minYellow=np.array([26,43,46]) maxYellow=np.array([34,255,255]) #绿 minGreen=np.array([35,43,46]) maxGreen=np.array([77,255,255]) #青 minCyan=np.array([78,43,46]) maxCyan=np.array([99,255,255]) #蓝 minBlue=np.array([100,43,46]) maxBlue=np.array([124,255,255]) #紫 minPurp
CF1651BProveHimWrong题解 题意 一道构造题,对于一个数组\(a\),要求任意的\(i,j(i\neqj)\)都满足\(i=j=|i-j|\)后,数组的总和不会减小,输出这样的数组。 Solution 不妨设这个数组是有序的。首先关注\(a_0\)和\(a_1\)。 用数学语言转化一下要求 \[|a_0-a_1|+|a_0-a_1|\gea_0+a_1 \]因为式子是有序的,所以\(a_0<a_1\),则有\(|a_0-a_1|=a_1-a_0\)。 所以 \[a_1-a_0+a_1-a_0\gea_0+a_1 \]\[2\timesa_1-2\timesa_0\gea_0+a_1 \]\[3\timesa_0\lea_1 \]可以发现\(a_0\)和\(a_i(1\lei\len)\)都满足这个条件。 对于\(a_1\)等等都要满足。 所以就可以粗暴的构造,令\(a_i=a_{i-1}\times3\)。 同时还要求\(a_i\le10^{9}\)。一边算一边判断即可。 Code /* Writer:ZhengXiangYu */ #include<bi
在FireFox43、Chrome44浏览器下,点击某个按钮进行页面跳转时,控制台提示window.location.hrefisnotafunction. 上网搜索结果后,得到的解决方案如下: 将 window.location.href("http://www.cnblogs.com/code-ten/"); 复制 修改为: window.location.href="http://www.cnblogs.com/code-ten/"; 复制 利用上述解决方案后,确实能够在FireFox和Chrome浏览器下进行页面跳转。 在此次搜索中,发现各位大神也提出了window.location.href=url在某些版本的FireFox中也会失效,这是由于这个属性在这些浏览器中是只读属性,并不能通过这样的方式进行赋值跳转。对于这个问题,推荐的解决方案为将跳转语句写成如下方式: window.location="http://www.cnblogs.com/code-ten/"; 复制