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
posted @ 2020-11-14 20:32  咬紧牙关  阅读(99)  评论(0)    收藏  举报