ajax邮箱心得
案例总结
开始介绍
-
今天写了一个案例和封装了ajax函数及node服务端知识点,总得来说,时间花了很长,但最后结果还是好的。
-
首先先说一下:我干了什么
为了学习node的综合案例,我又回去复习了前面的ajax,开始学的时候ajax学了一半,因为那时候还没学node所以很多知识都是摸棱两可。很是烦恼!
复习ajax,开始先回顾了原生写法,然后在封装了ajax函数,这样做案例就会非常的快!♥
但是有一点因为学了node总是和ajax里面知识点搞混!
路径问题(重点!!)
发现ajax里面的路径和node路径总是不能访问!(很烦恼)
// 这是能接收的数据路径.
app.use('/node_modules/', express.static('./node_modules/'))
app.use(express.static(path.join('./public')))
// 本来按照ajax里面因该这样写。
app.use( express.static(path.join(__dirname, 'node_modules/')))
app.use(express.static(path.join(__dirname, 'public')));
// 但是无论如何都不能访问,我哭了!
// 本来按理说,第二种要好一点 __dirname,动态绝对路径!因该是可以的。
拼写问题
总是写错(下面是封装的ajax函数)
// 下面地23行代码,开始写的时候浏览器报错,我还以为是封装错了。原来是传递的参数我传成了字符串类型!我giao
function ajax(option) {
var defaults = {
type: 'get',
url: '',
data: {},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: function(){},
error: function(){}
}
Object.assign(defaults, option)
var xhr = new XMLHttpRequest()
var parms = ''
for (attr in defaults.data) {
parms += attr + '=' + defaults.data[attr] + '&'
}
parms = parms.slice(0, -1)
if (defaults.type === 'get') {
defaults.url += '?' + parms
}
**xhr.open(defaults.type, defaults.url)**
if (defaults.type === 'post') {
// post有两种形式所以
xhr.open('defaults.type', 'defaults.url')
xhr.setResponseHeader('Content-Type', defaults.header['Content-type'])
if (defaults.header['Content-Type'] == 'application/json') {
xhr.send(JSON.stringify(defaults.data))
}
xhr.send(parms)
} else {
xhr.send()
}
xhr.onload = function() {
// 从服务端响应会有几种不同的东西
var contentType = xhr.getResponseHeader('Content-Type')
var responseText = xhr.responseText
if (contentType.includes('application/json')) {
responseText = JSON.parse(responseText)
}
if (xhr.status == 200) {
defaults.success(responseText, xhr)
} else {
defaults.error(responseText, xhr)
}
}
xhr.onerror = function() {
// 失败了就返回对象xhr
defaults.error(xhr)
}
}
-
案例问题(验证邮箱案例)
-
案例问题,我使用了node里面的新建了router路由,将代码分离,便于维护!
/* 这里是调用ajax函数。
值得注意的是
data: {
em: emali_value
}
在原生代码里面(就是封装函数里面代码)
这里使用了get方式
拼接方式因该是这样的: http://localhost:3000/jiazai?em=2268128377@qq.com (例子)
原生里面会输入xhr.send()发送
然后node服务器会接收参数来判断。req.query.em
> 这里以后用数据库来判断是否存在(现在这是简单传入参数判断)
*/
ajax({
type: 'get',
url: 'http://localhost:3000/jiazai',
data: {
em: emali_value
},
success: function(result) {
p_text[0].innerHTML = result.message
p_text[0].className = 'tuchu good'
},
error: function(result) {
p_text[0].innerHTML = result.message
p_text[0].className = 'tuchu error'
}
})
//node: code
var express = require('express')
var router = express.Router()
router.use('/jiazai', function(req, res) {
var email = req.query.em
if (email == '2268128377@qq.com') {
res.status(400).send({
message: '邮箱已经被注册过了'
})
} else {
res.send({
message: '恭喜你,注册成功'
})
}
})
module.exports = router

浙公网安备 33010602011771号