美文网首页
原生JS实现Ajax

原生JS实现Ajax

作者: Chihiro_yy | 来源:发表于2019-09-30 16:33 被阅读0次

原生Js的实现

function ajax(options){
            var pramas = {
                url:'',
                type: 'get',
                data: {},
                success: function (data) {},
                error: function (err) {},
            }
            options = Object.assign(pramas, options)
            if(options.url){
                var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP")
                var url = options.url,
                    type = options.type.toUpperCase(),
                    data = options.data,
                    dataArr = [];
                for(let key in data){
                    let value = key + '='+ data[key]
                    dataArr.push(value)
                }
                if(type === "GET"){
                    url = url + "?" + dataArr.join('&')
                    xhr.open(type, url, true)
                    xhr.send()
                }
                if(type === "POST"){
                    xhr.open(type,url, true)
                    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded')
                    xhr.send(dataArr.join('&'))
                }
                xhr.onreadystatechange = function(){
                    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {  // 304未修改
                        options.success(xhr.responseText)
                    }else {
                        options.error(xhr.responseText)
                    }
                }
            }
        }
        function ajax(option) {
        //新建ajax对象
            var xhr = new XMLHttpRequest()
            var meathod = option.meathod || 'GET'
            var url = option.url
            var date = option.date || {}
            var str = '?'
            for (var key in date) {
                str += key + '=' + date[key] + '&'
            }
            url += str.slice(0, str.length - 1)
            console.log(url)
            //建立连接(‘获取方式’,‘连接对象’,‘同步或异步’)
            xhr.open(meathod, url, true)
            xhr.send()//发送请求
            xhr.onreadystatechange = function () {
                console.log(xhr.readyState)
                //当readyState为4时表示数据已经返回到服务器
                //当status的值为200时则表示服务器能返回正确的数据
                if (xhr.readyState === 4 && xhr.status === 2000) {
                    console.log(res)
                    //将获取来的数据(字符串)转为对象格式,并赋值
                    var zhi = JSON.parse(xhr.responseText)

                   
                    option.success(zhi)
                }
            }
        }

事件

鼠标事件

mouseover//鼠标经过
mouseout//鼠标离开(鼠标移入到子元素中属于鼠标离开)
mouseenter//鼠标移入
mouseleave//鼠标离开(鼠标移入到子元素中不属于鼠标离开)
mouseover//鼠标移入
mousedown//鼠标按下
mouseup//鼠标抬起
dbblock//双击
mousemove//鼠标移动

//*禁止鼠标右键菜单弹出:contextmenu
 //禁止选中文字:selectstart
  //举个栗子:
  document.addEventListener('selectstart',function(e){
  e.preventDefault();//阻止默认事件发生
  })

*e.stoppropagation();//阻止事件冒泡

键盘事件

keyup//按键弹起触发
keydown//按下
keypress//按下(但是无法识别功能键)

事件对象(event)

每一个事件都会有一个默认的事件对象,但是event存在兼容性的问题(window.event)
任何事件触发的时候,程序都会提供给我们一个事件对象event 

存储着一些与事件相关的信息

也是有兼容生的,高级浏览器是支持的,但是IE8及以下的浏览器的是支持的window.event  

Var  e = event || window.event;

三个坐标

event.clientX/Y                 可视区,以浏览器可视区的左上角为基准

event.pageX/Y                   以页面的左上角为基准

event.screenX/Y                 以电脑屏幕的左上角为基准

pageX/Y是有兼容性的, 

event.pageX/Y = event.clientX/Y+event.scrollTop/Left
- event.preventDefault() :   阻止默认事件
- event.stopPropagation(): 阻止冒泡
- event.stopImmediatePropagation():  除了该事件的冒泡行为被阻止之外(event.stopPropagation方法的作用),该元素绑定的后序相同类型事件的监听函数的执行也将被阻止.
- event.target: 返回触发事件的元素
- event.currentTarget: 返回绑定事件的元素

DOM事件级别

element.onclick=function(){}
element.addEventListener('click',function(){},false)

移动端事件

click事件

单击事件,类似于PC端的click,但在移动端中,连续click的触发有200ms ~ 300ms的延迟

touch类事件

触摸事件,有touchstart touchmove touchend touchcancel 四种之分

touchstart:手指触摸到屏幕会触发

touchmove:当手指在屏幕上移动时,会触发

touchend:当手指离开屏幕时,会触发

touchcancel:可由系统进行的触发,比如手指触摸屏幕的时候,突然alert了一下,或者系统中其他打断了touch的行为,则可以触发该事件



tap类事件

触碰事件,我目前还不知道它和touch的区别,一般用于代替click事件,有tap longTap singleTap doubleTap四种之分

tap: 手指碰一下屏幕会触发

longTap: 手指长按屏幕会触发

singleTap: 手指碰一下屏幕会触发

doubleTap: 手指双击屏幕会触发

new关键字

new   用来创建新的对象

1   先创建了一个自定义对象  

2   把this关键字指向刚才创建的对象

3   执行构造函数里的代码,也就是想this(已经创建的对象)添加属相和方法

4   返回this(被创建的对象)

页面高度获取

window.location//获取地址栏信息

scroolTop//页面卷出高度

document.body.clientHeight//网页可见区域高度

document.body.offsetHeight//网页可见区域高度(包括边线)

document.documentElement.offsetHeight//文档高度

清除函数绑定事件

removeEventListener('事件',函数名)

元素的增加

appendChild
insertBefore

元素的删除

removeChoild

元素的修改

src|href|title//修改元素属性
innerHTML|innerText//修改元素内容
value|type|disabled//修改表单元素
style|className//修改元素样式

元素的查询

getElementById|getElementByTagName|getElementByClassName//Dom提供的API
querySelector|querySelectorAll//H5提供的新方法
父(parentNode)、子(children)、兄(previousElementSibing<上一个>,nextElementSibling<下一个>)

元素属性的操作

setAttribute//设置dom的属性值
getAttribute//得到dom的属性值
removeAttribute//移除属性

注册事件

on+事件//传统注册事件(具有唯一性,后面的会覆盖前面的
addEventListener()//有兼容性问题
监听对象.addEventListener(事件类型的字符串,事件处理函数<事件处理时会调用该函数>,可靠参数<是一个布尔值,默认是false>)

快排序(srot)

返回一个值,如果返回的值是小于0则a在b的前面,相反则在后面

节流

节流:
在无限下拉加载时会发送多次请求,我们需要在上一次数据加载回来之前不发送请求,直到数据回来再发送请求。

模板字符串

``//包字符串,中间可加变量用${}添加

存储

localStorage.setItem(key,value)//往数据库中存数据
localStorage.getItem(key,value)//往数据库中取数据

target和this

e.target//返回的是触发事件对象,它指向的是点击的那个对象,就返回那个对象
this//返回的是绑定元素的对象(currentTarget约等于this但是会返回绑定对象兼容性问题)

相关文章

  • 原生js实现Ajax

    原生js实现Ajax方法:var Ajax={get: function(url, fn) { var xhr =...

  • 原生js实现ajax及get post方法

    @拭目以待:首发于原生js实现ajax及get post方法 ajax原生实现,含 post与get方法。原码如下...

  • 前端基础知识-示例代码

    1、ajax 2、jsonp a、原生实现方式 b、jquery ajax: c、vue.js d、npm包jso...

  • js原生的ajax

    //下面是原生的js实现的ajax function myajax(){ var xmlhttp; if (win...

  • ajax和fetch的区别

    一、Ajax Ajax的本质是使用XMLHttpRequest对象来请求数据,下面简单贴下原生js实现: 二、fe...

  • 原生JS AJAX实现

    AJAX说明 IE7及其以上版本中支持原生的 XHR 对象,因此可以直接用:new XMLHttpRequest(...

  • 原生js实现Ajax

    如果要用原生的JS实现Ajax怎么整呢,让我们一起来整一个试试。 方法: /** 详细说明: 1.Ajax步骤:1...

  • 原生JS实现AJAX

    原生JS实现AJAX代码,代码如下 如果需要ajax运行方法完成后调用结果的话 需要使用回调函数 或者 promi...

  • 原生js实现ajax

  • 原生JS实现Ajax

    原生Js的实现 事件 鼠标事件 *e.stoppropagation();//阻止事件冒泡 键盘事件 事件对象(e...

网友评论

      本文标题:原生JS实现Ajax

      本文链接:https://www.haomeiwen.com/subject/nwbuyctx.html