Slog50_支配vue框架初阶项目之博客网站-单页-客户端(浏览器)更新头像2

news/2024/4/29 0:04:33/文章来源:https://blog.csdn.net/weixin_34032827/article/details/88741956
  • ArthurSlog
  • SLog-50
  • Year·1
  • Guangzhou·China
  • Aug 26th 2018

  • GitHub
  • 掘金主页
  • 简书主页
  • segmentfault

要成就一番事业 既要靠本事上位 又得懂拉拢站队


开发环境MacOS(High Sierra 10.13.5)

需要的信息和信息源:

  • 统一资源定位符(URL)
  • XMLHttpRequest
  • vue模版语法 v-bind
  • FormData
  • FormData 对象的使用
  • 通过AJAX提交表单和上传文件可以不使用FormData对象
  • URL.createObjectURL()

开始编码

  • 首先,先理一下思路:
1.用户登陆、客户端(浏览器)登陆 ->
2.向服务端发送一条信息,获取用户数据 ->
3.服务端处理客户端发来的数据,返回相应的数据 ->
4.客户端(浏览器)接收返回的数据 ->
5.客户端(浏览器)解析返回的数据 ->
6.客户端(浏览器)根据解析好的数据,进行业务处理
(将处理好的数据路由到相应的前端的逻辑功能) ->
7.客户端(浏览器)渲染页面
  • 上一篇文章,实现个头像的更新功能,但是需要重新登陆的时候,才会显示更新的图片
  • 这次要做的,就是提交更新后让图片马上更新成最新的图片
  • 考虑一下具体的实现逻辑,使用 vue.js框架双向数据流的功能,可以有下面几种方式:
  1. 客户端(浏览器)在提交图片给服务器成功之后,同时客户端(浏览器)把提交的图片覆盖本地的图片
  2. 客户端(浏览器)提交图片给服务器后,重新向服务器发送请求,获取最新的图片数据,页面上渲染最新的图片数据
  3. 客户端(浏览器)在选择了准备传送的图片之后,提交图片给服务器之前,页面渲染最新的图片
  • 选择第三种方法,我们要在选择图片的时候,同时渲染新的图片
  • 根据 vue模版语法 v-bind,使用 v-bin 绑定 图片的src,让我们可以在 client/signup.js 里可以动态修改 图片的src 的值,正因为 vue.js框架双向数据流的特性,当在 client/signup.js 修改 图片的src 的值的时候,页面上也会同时渲染新的图片
  • 更新后的完整代码

client/signup.js

var host = 'http://127.0.0.1:3000/';var signup_container = new Vue({el: '#signup-container',data: {name_signin: '',password_signin: '',name: '',password: '',repassword: '',firstname: '',lastname: '',birthday: '',sexs: ['male', 'female'],currentSex: 'male',ages: ['1', '2', '3', '4', '5', '6', '7', '8','9', '10', '11', '12', '13', '14', '15', '16', '17', '18'],currentAge: '18',wechart: '',qq: '',email: '',contury: '',address: '',phone: '',websize: '',github: '',bio: '',commits: null,pagestate: '0',image: '',imageSrc: '/image/ArthurSlog_icon.jpg'},methods: {uploadfiles: function () {var xhr = new XMLHttpRequest()var fd = new FormData()var self = thisxhr.open('POST', host + 'uploadfiles', true)xhr.onload = function () {//self.commits = xhr.responseTextself.commits = xhr.responseText}fd.append('myFile', this.image)xhr.send(fd)},filesChange: function (event) {this.image = event.target.files[0]this.imageSrc = window.URL.createObjectURL(event.target.files[0])},return_index: function () {this.pagestate = '0'},signin_index: function () {this.pagestate = '1'},signup_index: function () {this.pagestate = '2'},signin: function () {//当点击登陆的时候,在页面上渲染从服务端返回的数据,把其他的部分隐藏掉this.pagestate = '3'var xhr = new XMLHttpRequest()var self = thisxhr.open('GET', host + 'signin?' + 'name=' + self.name_signin + '&password=' + self.password_signin, true)xhr.onload = function () {//self.commits = xhr.responseTextvar myObj = JSON.parse(xhr.responseText);self.commits = myObj}xhr.send()},addUser: function () {//当点击注册的时候,在页面上渲染从服务端返回的数据,把其他的部分隐藏掉this.pagestate = '3'var xhr = new XMLHttpRequest()var self = thisxhr.open('GET', host + 'signup?' + 'name=' + self.name + '&password=' + self.password + '&firstname=' +self.firstname + '&lastname=' + self.lastname + '&birthday=' + self.birthday+ '&sex=' + self.currentSex + '&age=' + self.currentAge + '&wechart=' + self.wechart+ '&qq=' + self.qq + '&email=' + self.email + '&contury=' + self.contury+ '&address=' + self.address + '&phone=' + self.phone + '&websize=' + self.websize+ '&github=' + self.github + '&bio=' + self.bio, true)xhr.onload = function () {self.commits = xhr.responseText}xhr.send()}}
})
  • 更新的部分:

server/index.js

//data部分
data: {imageSrc: '/image/ArthurSlog_icon.jpg'
}
//methods部分
methods: {filesChange: function (event) {this.image = event.target.files[0]this.imageSrc = URL.createObjectURL(event.target.files[0])}
}
  • URL.createObjectURL(),使用这个方法生成一个 URL资源定位符赋值给图片的src,更新图片
  • 同时,我们需要更新 html文件,在html文件里使用 vue.js模版语法 v-bin

client/app.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><link rel="stylesheet" type="text/css" href="./css/style.css"><!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><title>signin_ArthurSlog</title>
</head><body><div id="signup-container"><template class="container" v-if="pagestate === '0'"><div>This is index's page by ArthurSlog</div><br><button v-on:click="signin_index">Signin</button><br><button v-on:click="signup_index">Signup</button></template><template id="Signin" v-else-if="pagestate === '1'"><div>This is signin's page by ArthurSlog</div><p>Singin</p><form id="form1" v-on:submit.prevent="signin"><br><div>Account: {{ name_signin }}<br><input type="text" v-model="name_signin" placeholder="username"></div><br><br><div>Password: {{ password_signin }}<br><input type="text" v-model="password_signin" placeholder="password"></div><br><input type="submit" value="登陆"></form><br><button v-on:click="return_index">ReturnIndex</button></template><template id="Signup" v-else-if="pagestate === '2'"><div>This is signup's page by ArthurSlog</div><p>Singup</p><form id="form2" v-on:submit.prevent="addUser"><br><div>Account: {{ name }}<br><input type="text" v-model="name" placeholder="username"></div><br><br><div>Password: {{ password }}<br><input type="text" v-model="password" placeholder="password"></div><br><br><div>Again Password: {{ repassword }}<br><input type="text" v-model="repassword" placeholder="repassword"></div><br><br><div>First Name: {{ firstname }}<br><input type="text" v-model="firstname" placeholder="firstname"></div><br><br><div>Last Name: {{ lastname }}<br><input type="text" v-model="lastname" placeholder="lastname"></div><br><br><div>Birthday: {{ birthday }}<br><input type="text" v-model="birthday" placeholder="2000/08/08"></div><br><br><div><span>Sex: {{ currentSex }}</span><br><input type="radio" id="sex" value="male" v-model="currentSex"><label for="sex">male</label><br><input type="radio" id="sex" value="female" v-model="currentSex"><label for="sex">female</label></div><br><br><div><span>Age: {{ currentAge }}</span><br><select v-model="currentAge" id="age"><option disabled value="">Select</option><option v-for="age in ages">{{ age }}</option></select></div><br><br><div>Wechart: {{ wechart }}<br><input type="text" v-model="wechart" placeholder="wechart's name"></div><br><br><div>QQ: {{ qq }}<br><input type="text" v-model="qq" placeholder="12345678"></div><br><br><div>Email: {{ email }}<br><input type="text" v-model="email" placeholder="12345678@qq.com"></div><br><br><div>Contury: {{ contury }}<br><input type="text" v-model="contury" placeholder="China"></div><br><br><div>Address: {{ address }}<br><input type="text" v-model="address" placeholder="Guangzhou"></div><br><br><div>Phone: {{ phone }}<br><input type="text" v-model="phone" placeholder="138********"></div><br><br><div>Websize: {{ websize }}<br><input type="text" v-model="websize" placeholder="xxx.com"></div><br><br><div>Github: {{ github }}<br><input type="text" v-model="github" placeholder="Github's URl"></div><br><br><div>Bio: {{ bio }}<br><input type="text" v-model="bio" placeholder="This is the world~"></div><br><br><input type="submit" value="完成注册"></form><button v-on:click="addUser">addUser</button><br><button v-on:click="return_index">ReturnIndex</button><br></template><template id="returnResult" v-else-if="pagestate === '3'"><div><img id="ArthurSlog_icon" v-bind:src="imageSrc" alt="ArthurSlog_icon" /></div><div><div>Uploading {{ image }} files...</div><br><input type="file" v-on:change="filesChange"><br><button v-on:click="uploadfiles">uploadfiles</button></div><div id="signinResult"><div v-for="(value, key) in commits">{{ key }}: {{ value }}</div></div></template></div><script src="./js/signup.js"></script>
</body></html>
  • 更新部分:

client/app.html

<div><img id="ArthurSlog_icon" v-bind:src="imageSrc" alt="ArthurSlog_icon" />
</div>
  • 使用 v-bin 绑定了src的值之后,通过 imageSrc 这个对象,js文件 可以 html文件里面图片的 src的值
  • 现在,打开浏览器,输入 127.0.0.1:3000/app.html,点击 signin 按钮
  • 输入账号:ArthurSlog 密码:ArthurSlog,点击登陆
  • 成功登陆之后,点击 “选择文件” 按钮,选择一张你电脑里的图片,然后点击“打开”
  • 正常执行的情况下,你会发现,你的头像已经变成了你最新选取的图片了
  • 再点击 uploadfiles 按钮,观察 服务端终端,正常情况下成功接收到文件,并打印出文件信息
  • 刷新页面,点击 signin 按钮
  • 输入账号:ArthurSlog 密码:ArthurSlog,点击登陆
  • 正常情况下,头像已经更新为你最近更改的图片了
  • 至此,我们实现了客户端头像选取后即时更新的功能。

欢迎关注我的微信公众号 ArthurSlog

关注微信公众号“ArthurSlog”

如果你喜欢我的文章 欢迎点赞 留言

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_754952.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Apache服务部署静态网站

使用Apache服务部署静态网站 1.网站服务程序Web网络服务&#xff0c;一般是指允许用户通过浏览器访问到互联网中各种资源的服务。Apache程序是目前拥有很高市场占有率的Web服务程序之一&#xff0c;其跨平台和安全性广泛被认可且拥有快速、可靠、简单的API扩展。Apache也是RHEL…

基于SpringBoot+MyBatis+Vue的音乐网站

点击上方“Java基基”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人&#xff01;每天 14:00 更新文章&#xff0c;每天掉亿点点头发...源码精品专栏 原创 | Java 2021 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框…

使用VS2012开发的网站或者webservice在IIS6.0上发布的注意事项

由于新版的VS2012的出现&#xff0c;很多人转而使用VS2012作为开发工具&#xff0c;微软每次新的版本都会新增一些功能&#xff0c;带给我们不少的惊喜&#xff0c;但是在VS2012或者VS2010下开发的网站或者webservice在部署时要注意了&#xff0c;由于VS2010以上版本的.net fra…

流量排名前一千万网站,三分之一使用 WordPress

WordPress 在官博发文&#xff0c;庆祝它在流量排名前一千万网站中的市场占有率达到了三分之一。据 W3Techs 的数据&#xff0c;WordPress 在前一千万网站的市场份额从一年前的 29.9% 上升到了现在的 33.4%。WordPress 表示对此非常自豪。 作为开源内容管理系统的 WordPress&am…

大型网站技术架构(六)网站的伸缩性架构

2019独角兽企业重金招聘Python工程师标准>>> 网站系统的伸缩性架构最重要的技术手段就是使用服务器集群功能&#xff0c;通过不断地向集群中添加服务器来增强整个集群的处理能力。“伸”即网站的规模和服务器的规模总是在不断扩大。 1、网站架构的伸缩性设计 网站的…

30个免费下载高质量精美照片素材的网站(转)

在设计中使用免费的照片素材可以节省大量的时间。网络有有很多分享照片资源的网站&#xff0c;有些是免费的&#xff0c;有些则需要付费&#xff0c;当你在设计中使用网上的照片素材的时候要注意使用协议以免带来麻烦。今天这篇文章向大家推荐30个国外的免费下载高质量精美图片…

html显示日志_seo优化的网站日志分析

网站日志相信这个名词&#xff0c;站长们不知道。大多数站长只知道网站日志的概念&#xff0c;不知道网站日志的分析。其实网站日志的分析也是一个很重要的SEO话题。网站日志应该说每个站长都要懂得分析&#xff0c;这是每个站长必备的技术。要知道网站日志的分析方法&#xff…

php开发小说数据问题,小说类网站开发之创建数据库与建立数据表

php开发后端中最重要的一个环节就是创建数据库与建立数据表&#xff0c;因为他和整个项目都有直接的关系&#xff0c;所以&#xff0c;我们首先建立几个数据表&#xff0c;为后面写程序垫下基础首先我们先去建立数据库文章然后查询数据库这里我们写的是小说站&#xff0c;我就建…

linux c多进程多线程,等待进程 - Linux C进程与多线程入门_Linux编程_Linux公社-Linux系统门户网站...

问题在创建进程这一节内容中&#xff0c;我们看到&#xff0c;消息的输出是父子进程交替输出&#xff0c;且父进程在子进程之前结束。如果要安排父进程在子进程结束之后才结束。可以调用wait函数。函数说明pid_t wait(int * stat_loc)包含的头文件: #include #include 返回值&a…

有哪些网站是django开发的_想要定制开发下单网站需要准备哪些内容?

引言&#xff1a;企业对外推广少不了要有一个形象网站&#xff0c;如果不能通过模板网站满足企业建站需求&#xff0c;大多数情况下是需要定制开发网站的。想要定制开发网站或设计定制网站&#xff0c;都需要准备什么呢&#xff1f;网慧科技小编帮您捋清这4个问题可以避免晕头转…

6页面跳转_SEO优化的高级玩法,半年权重6,日均流量过万!

老老实实做内容&#xff0c;发现竟然抵不过seoer的高级玩法。我只能说给大神跪了。这个玩法是真实可操作的&#xff0c;是一个朋友在请教我一个seo问题的时候&#xff0c;给我发了一个网站&#xff0c;让我分析分析&#xff0c;然后本着钻研的精神&#xff0c;研究了那个网站的…

换服务器影响网站排名,网站更换服务器空间会影响排名吗

做seo的都知道&#xff0c;网站空间不稳定会影响SEO优化的效果&#xff0c;因为会降低搜索引擎对于网站的信任度判断&#xff0c;特别是最近使用香港空间的网站&#xff0c;会经常性遇到网站无法打开&#xff0c;或者打开速度非常慢&#xff0c;为了彻底解决稳定问题&#xff0…

网站服务器接收数据,科学网—TCP服务器接收数据 - 杨杭的博文

1.在pycharm中编写如下服务器端代码import structfrom socket import *#创建套接字s socket(AF_INET, SOCK_STREAM)#绑定端口HOST1********* #需要指定服务器IP地址PORT8080s.bind((,8089)) #绑定的是本机&#xff0c;端口为8089s.listen()#接收客户端的连接client_socket, cl…

64位虚拟机下asm()语法_2.0正式版系统使用宝塔虚拟机建站

本教程适用于树莓派爱好者基地64位系统2.0正式版使用&#xff0c;1.0正式版使用宝塔虚拟机的教程在前面已经发了&#xff0c;请根据自己使用的系统选择相应的教程&#xff01;本教程教大家使用宝塔虚拟机&#xff0c;大大降低大家在树莓派上面建站的难度&#xff01;&#xff0…

wordpress是php文件路径,wordpress怎么输出网站文件路径

WordPress获取网站相关文件路径可以通过相关的函数来获取和输出。WordPress中可以通过相关函数获取站点路径、主题文件路径、插件文件路径等。具体输出路径方法如下&#xff1a;站点路径相关函数home_url()返回站点路径&#xff0c;相当于后台设置->常规中的”站点地址(URL)…

nginx访问服务器响应慢_网站访问慢?不要让你的网站输在服务器上

建网站如果把域名看做是地址、那么网站的服务器(空间)就是一套房子&#xff0c;既然是一套房子&#xff0c;那就有很多方面的讲究如&#xff1a;地段、户型、朝向、面积、开发商、物业、配套设施等等。服务器(空间)也是一样&#xff0c;有CPU、内存、带宽、机房、安全维护、服务…

nofollow标签_nofollow标签对于网站优化有什么作用?

nofollow标签对于网站优化有什么作用&#xff1f;我们经常面临站内链接处理问题&#xff0c;因为有些优化价值小的页面会分散网站权重&#xff0c;我们要直接取消掉此链接&#xff0c;就会导致用户体验变差&#xff0c;要保留就会被继续分权&#xff0c;网站排名上升也会慢很多…

linux 查看内核是否转发_Linux 中实用的 4种 shell 脚本查看网站是否正常

linux系统运维过程中&#xff0c;经常会遇到些问题&#xff0c;有时候问题会比较麻烦&#xff0c;此时shell脚本的优势就体现出来&#xff0c;下面我来介绍几种查看网站是否正常的shell脚本。文内含长段代码可复制可往左滑&#xff0c;希望对大家有帮助&#xff01;其一#!/bin/…

网站刷关键词_正规的首页关键词排名方法是什么?如何收费的?

现在几乎每个企业都是线上线下共同运营的&#xff0c;但是移动互联网的竞争激烈&#xff0c;需要使用有效的手段来 获得更好的运营状态。而关键词优化是目前符合用户及企业的有力工具&#xff0c;用户用关键词来快速找到自己想要的&#xff0c;企业用关键词来获得靠前的排名&am…

seo自动工具_北京seo自动优化

北京seo自动优化优化的核心内容包括&#xff1a;找到适合的推广方式&#xff1b;建立优化的网络品牌&#xff1b;建立出色的技术&#xff1b;合理、专业的推广手段&#xff1b;正确、***的渠道策划。现在&#xff0c;在网络发展的各个阶段&#xff0c;人们都发现网络推广是很有…