ajax基础及get请求方式例子

ajax

ajax是异步的javascript与XML 可以完成对应的异步请求

特点:
局部刷新(不会重新加载页面,只会改变页面的一部分)
ajax是原生js里面自带的
ajax可以发送http请求
前后端与数据库联系

前端 发送请求 后端 访问数据库

数据库返回执行的内容 给到后端,后端进行处理 将数据响应到前端(响应操作)

ajax创建

内置对象 请求对象 在请求的过程中 监听请求状态 请求成功后从而获得响应 响应里面在读取到数据

		//创建一个请求对象
        let xhr = new XMLHttpRequest()
        //设置请求地址
        xhr.open('get',"https://jsonplaceholder.typicode.com/todos")
        //发送请求
        xhr.send()
        //监听请求状态
        xhr.onreadystatechange = function(){
            //请求完成后,读取响应的数据
            //判断是否成功了
            //状态码    1 表示已经成功还需要继续操作  2 已经完成   3 重定向页面   4 客户端错误(404,找不到)  5服务器错误
            //readyState值  0未初始化   1 启动  2 接受请求未响应  3 部分完成    4 完成
            if(xhr.readyState == 4 && /^20\d$/.test(xhr.status)){
                console.log(xhr.responseText);//获取响应的内容
                // response 响应主体    responseType 响应数据类型
            }
        }

例子

css样式
        .selected{
            background-color: aqua;

        }

js样式
        //建立XMLHttpRequest
        let xhr = new XMLHttpRequest()
        //设置请求(get请求  传递参数 直接在请求地址后面加?参数1=值&参数2=值2...)
        //_page是第几页 _limit是每页的个数
        xhr.open('GET','https://jsonplaceholder.typicode.com/todos')
            
        //发送请求
        xhr.send()
        //监听请求状态
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4 && /^20\d$/.test(xhr.status)){
                //在监听方法中获取对应响应的内容
                let res = xhr.responseText
                //转为数组,求得长度为总个数
                let count = JSON.parse(res).length
                //设置每一页显示个数
                const page = 9
                //求出页数
                const pageCount = Math.ceil(count/page)
                //先加载第一页内容
                changePage(1)
                //渲染到页面
                //创建table                
                function changePage(currentPage){
                    //建立XMLHttpRequest
                    let xhr1 = new XMLHttpRequest()
                    //设置请求(get请求  传递参数 直接在请求地址后面加?参数1=值&参数2=值2...)
                    //_page是第几页 _limit是每页的个数
                    xhr1.open('GET',`https://jsonplaceholder.typicode.com/todos?_page=${currentPage}&_limit=${page}`)
                        
                    //发送请求
                    xhr1.send()
                    //监听请求状态
                    xhr1.onreadystatechange = function(){
                        if(xhr1.readyState==4 && /^20\d$/.test(xhr1.status)){
                            //在监听方法中获取对应响应的内容
                            let res = xhr1.responseText
                            //转为数组
                            res = JSON.parse(res)
                            //渲染到页面
                            //创建table
                            //如果已经有table,就清除
                            if(document.querySelector('table')){
                                document.querySelector('table').remove()
                            }
                            //没有就创建table
                            let table = document.createElement('table')
                            //创建表头
                            let tHead = document.createElement('tr')
                            //创建自己添加的序号
                            let th1=document.createElement('th')
                            th1.innerText = '序号'
                            //把序号也添加到表头里
                            tHead.appendChild(th1)
                            //为本来就存在的键创建表th
                            for(let key in res[0]){
                                let th = document.createElement('th')
                                th.innerText = key
                                //把表th添加到表头
                                tHead.appendChild(th)
                                }
                            //把表头添加到table
                            table.appendChild(tHead)
                            //为本来就存在的格子添加大小
                            table.border = '1px'
                            //将table添加到body
                            document.body.appendChild(table)
                            //遍历对象数组
                            res.forEach((v,index) => {
                                //创建tr和td
                                let tr = document.createElement('tr')
                                //创建序号的表td
                                let firstTd = document.createElement('td')
                                //填充序号内容
                                firstTd.innerText = index+1
                                //把序号添加到tr
                                tr.appendChild(firstTd)
                                //遍历对象
                                for(let attr in v){
                                    //创建表td
                                    let td = document.createElement('td')
                                    //把对象的内容添加到表td
                                    td.innerHTML = v[attr]
                                    //把td添加到tr
                                    tr.appendChild(td)
                                }
                                //把tr添加到table
                                    table.appendChild(tr)
                            });
                        }
                    }
                }
                //生成对应按钮
                
                //生成上一页按钮并添加到body中
                let btn1 = document.createElement('button')                
                document.body.appendChild(btn1)
                btn1.innerText = '上一页'
                //遍历创建按钮
                for(let i=1;i<=pageCount;i++){
                    let btn = document.createElement('button')
                    //第一页为默认选中
                    if(i==1){
                        btn.className = 'selected'
                    }
                    //每个按钮的值
                    btn.innerText = i                    
                    //切换按钮功能
                    btn.onclick = function(){
                        //点击时页面切换
                        changePage(i)
                        //清除所有按钮的class
                        fn()
                        //点击按钮添加class
                        btn.className = 'selected'
                    }
                    //每个按钮添加到body中
                    document.body.appendChild(btn)
                }
                //创建下一页的按钮
                let btn2 = document.createElement('button')
                btn2.innerText = '下一页'
                document.body.appendChild(btn2)
                //得到已经选择了的按钮(也就是class为selected的按钮)                       
                let select = document.querySelector('.selected')
                //得到按钮的值
                let index = Number(select.innerText)
                let countBtn = index
                //点击上一页事件
                btn1.onclick = function(){
                    //再次获取按钮的值
                    let select = document.querySelector('.selected')
                    let index = Number(select.innerText)
                    let countBtn = index 
                    //当小于2也就是1时不能在往上一页
                    if(countBtn<2){
                        countBtn=2
                    } 
                    //往上一页跳转
                    changePage(countBtn-1) 
                    //所有按钮的class清除
                    fn()
                    //为上一页的class赋值
                    btns[countBtn-1].className = 'selected'                                                                      
                }
                //同理设置下一页按钮的事件
                btn2.onclick = function(){  
                    let select = document.querySelector('.selected')
                    let index = Number(select.innerText)
                    let countBtn = index  
                    if(countBtn>pageCount-1){
                        countBtn=pageCount-1
                    }                
                    changePage(countBtn+1)                    
                    
                    fn()
                    btns[countBtn+1].className = 'selected'                
                }
                
                
                
            }
        } 
		//获取所有按钮
        let btns = document.getElementsByTagName('button')
        //封装清除所有按钮class的方法
        function fn(){
            for(let btn of btns){
                btn.className = ''
            }
        }  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值