ajax使用案例

ajax使用案例1、初步了解这里可以修改网络快和慢。限网,流量式的,做模拟的。network->all代表加载的所有事件后面的那个显示有/,这个是首路由。后面有很多svg和js等文件想要这个服务器的地址

大家好,又见面了,我是你们的朋友全栈君。

 

 

 1、初步了解

这里可以修改网络快和慢。限网,流量式的,做模拟的。

network->all代表加载的所有事件

<span role="heading" aria-level="2">ajax使用案例

后面的那个显示有/,这个是首路由。后面有很多svg和js等文件

<span role="heading" aria-level="2">ajax使用案例

想要这个服务器的地址,使用network->XHR  它是XMLHttpRequest 。

ajax封装的就是这个XHR对象。这里就能看到这个对象

<span role="heading" aria-level="2">ajax使用案例

对象里有很多数据,没必要去看原生js的这个方法

<span role="heading" aria-level="2">ajax使用案例

小**的接口:它调用的接口就是banner

<span role="heading" aria-level="2">ajax使用案例

点击banner就可以看到服务器的接口,请求方式,状态码,远程ip等等

<span role="heading" aria-level="2">ajax使用案例

下面是有响应头和请求头:

<span role="heading" aria-level="2">ajax使用案例

这里可以修改请求设备:

<span role="heading" aria-level="2">ajax使用案例

当点一下的时候又调用了很多接口,每个接口对应了很多数据。

<span role="heading" aria-level="2">ajax使用案例

我们把请求发出去了,然后看的是响应,响应的数据我们要进行渲染。响应的数据就是response ,preview是预渲染的视图。

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

将cover添加https: 进行访问,查看这个资源

<span role="heading" aria-level="2">ajax使用案例

就是它的一张图片:

<span role="heading" aria-level="2">ajax使用案例

2、实际原理演示

 添加回调函数

        $(function () {
            
        })

获取首页数据,发送ajax请求。请求url,请求方式,成功之后的回调函数。

        $(function () {
            $.ajax({})
        })

然后填我的请求地址:

<span role="heading" aria-level="2">ajax使用案例

两个之间逗号隔开

 $(function () {
            $.ajax({
                url:'https://api.apeland.cn/api/banner/',
                methods:'get',
                success:function () {
                    
                },
                error:function () {
                    
                }
            })
        })

再看下面代码:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box"></div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                url:'https://api.apeland.cn/api/banner/',
                methods:'get',
                success:function (res) {
                    console.log(res);
                },
                error:function (err) {
                    console.log(err); 
                }
            })
        })
    </script>
</body>
</html>

将我们请求之后服务器回应的数据打印出来,就是一个对象。

<span role="heading" aria-level="2">ajax使用案例

然后我们可以对这个服务器返回的数据进行解析,如果code是0,然后对data里面的数据做啥操作。

这是一个数组,一个元素,直接取这一个数组元素

<span role="heading" aria-level="2">ajax使用案例

现在要获取数组中的cover:

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box"></div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                url:'https://api.apeland.cn/api/banner/',
                methods:'get',
                success:function (res) {
                    if(res.code===0){
                        var cover=res.data[0].cover;
                        console.log(cover);
                    };

                },
                error:function (err) {
                    console.log(err);
                }
            })
        })
    </script>
</body>
</html>

View Code

success:function (res) {                    if(res.code===0){                        var cover=res.data[0].cover; console.log(cover);                    };                },

<span role="heading" aria-level="2">ajax使用案例

然后需要创建一个img将这个图片插入到我的页面中。

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">

    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            $.ajax({
                url:'https://api.apeland.cn/api/banner/',
                methods:'get',
                success:function (res) {
                    if(res.code===0){
                        var cover=res.data[0].cover;
                        console.log(cover);
                        $('#box').append(`<img src=${cover} alt=${name}>`)
                    };

                },
                error:function (err) {
                    console.log(err);
                }
            })
        })
    </script>
</body>
</html>

View Code

  success:function (res) {                    if(res.code===0){                        var cover=res.data[0].cover;
                var name=res.data[0].name;
                console.log(cover); 
              $(
'#box').append(`<img src=${cover} alt=${name}>`) //追加元素。追加标签用反引号,标签里用服务器返回的数据,使用${}接收变量,${}不用引起来
            }; },

这样就出来了:

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

 

当我点击python,这里显示Python的内容

<span role="heading" aria-level="2">ajax使用案例

当我点击云计算,这里显示的是云计算的内容。一个路由的不同,改变了页面的不同。

<span role="heading" aria-level="2">ajax使用案例

再比如看下面路飞网页:

这个url,又叫接口:

<span role="heading" aria-level="2">ajax使用案例

当我点击免费课的时候,能看到免费课的课程。一个url对应的接口不同,接口不同返回的数据不同,数据不同对应的页面就不同。这叫做数据驱动视图。数据变了,前端做了渲染,然后页面就变了

<span role="heading" aria-level="2">ajax使用案例

再点击轻客,url又变了,页面也变了。

<span role="heading" aria-level="2">ajax使用案例

url在变,这个接口也在变,数据也在变

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

上图和下图那栏数据一致:

<span role="heading" aria-level="2">ajax使用案例

点击运维获取的是sub_categroy是0和2的数据,0是所有的数据,2是运维的接口数据

<span role="heading" aria-level="2">ajax使用案例

 

 <span role="heading" aria-level="2">ajax使用案例

free_sections里的属性和页面中显示的一致:

<span role="heading" aria-level="2">ajax使用案例

开发工具获取的数据如下:

<span role="heading" aria-level="2">ajax使用案例

页面展示效果如下:

<span role="heading" aria-level="2">ajax使用案例

第一条数据展开如下;

<span role="heading" aria-level="2">ajax使用案例

双击这里可跳转到开发工具这个的所有数据的页面:

<span role="heading" aria-level="2">ajax使用案例

可以用json工具设置一下格式

<span role="heading" aria-level="2">ajax使用案例

这是并发的两次请求:

<span role="heading" aria-level="2">ajax使用案例

3、ajax实际代码实现

 这两处应该都是有个div,div下有个ul

 <span role="heading" aria-level="2">ajax使用案例

代码:需要用ajax拿到接口数据放到向导里面

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {

        })
    </script>
</body>
</html>

View Code

<span role="heading" aria-level="2">ajax使用案例

现在需要把这些接口拿到,然后获取接口下的数据:

<span role="heading" aria-level="2">ajax使用案例

现在审查元素,刷新一下,network->xhr->有个list

<span role="heading" aria-level="2">ajax使用案例

单击查看到当前页面的数据,python对应id1的数据,运维对应id2的数据。hide:false 表示这一项不隐藏,显示出来的

 <span role="heading" aria-level="2">ajax使用案例

后面页面访问这里也有对应:

<span role="heading" aria-level="2">ajax使用案例

然后从headers里复制出来这些数据的接口

 <span role="heading" aria-level="2">ajax使用案例

将接口放到ajax的url属性里面。

<span role="heading" aria-level="2">ajax使用案例

接口数据也可以直接用这个接口链接访问,不用在开发工具中看。

 <span role="heading" aria-level="2">ajax使用案例

谷歌有个格式化的插件,也可以用网上的格式化一下方便阅读;

<span role="heading" aria-level="2">ajax使用案例

复制过来格式化一下:这就是一个json文件

<span role="heading" aria-level="2">ajax使用案例

然后可以复制过来,方便自己调用时查看:

<span role="heading" aria-level="2">ajax使用案例

将1处的接口2放到ajax的url里面进行调用,在ajax里面会请求这个接口并在succes的回调函数里返回4处的数据赋值给存在的变量res。后面需要对服务器给我们返回的数据进行操作,那么我们就取4中的数据用变量的形式放到ajax创建的html标签中。这样前端访问到这个页面时就要从后端获取来的数据进行渲染的网页了。而后端程序员就是负责提供前端程序员这些接口,供他们调用这些数据将前端网页进行渲染的。

我们可以看到,4处返回的这些数据就是数据库的数据。每个{}里面就是一行(条)数据,每行数据都有相应的字段。

<span role="heading" aria-level="2">ajax使用案例

 1处这张表和2处这张表是有关联的,点击1表的一行数据Python    2处显示python相关的一张表的数据(我的理解是这里1处的每个li标签数据对应一个表;也可以是所有li标签对应2处的1个表,但是这张表有1处每条数据的id作为外键引入到这张表。这样的话就是每次点击1处表的某条数据内容,在2处对应这条数据id的2处表的内容在后端查询出来并在下面这个ul中显示。显示是根据2处的数据条数用ajax等语言创建li标签并变量代替生成相同格式的标签。)。点1处的每条数据,2处都是在不停的切换的,这就是表与表之间的关联。后台需要做很多操作的。后端数据的读取可以用python的pymysql模块。

<span role="heading" aria-level="2">ajax使用案例

下面写代码获取接口数据:

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        //         {
        //     "error_no": 0,
        //     "data": [{
        //         "id": 1,
        //         "name": "Python",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 2,
        //         "name": "Linux运维",
        //         "hide": false,
        //         "category": 4
        //     }, {
        //         "id": 4,
        //         "name": "Python进阶",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 7,
        //         "name": "开发工具",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 9,
        //         "name": "Go语言",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 10,
        //         "name": "机器学习",
        //         "hide": false,
        //         "category": 3
        //     }, {
        //         "id": 11,
        //         "name": "技术生涯",
        //         "hide": false,
        //         "category": 1
        //     }]
        // }
        $(function () {
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    console.log(res);
                },
                error:function f1(err) {
                    console.log(err);
                }
            })
        })
    </script>
</body>
</html>

View Code

        $(function () {            $.ajax({                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',                methods:'get',                success:function(res){                    console.log(res);                },                error:function f1(err) {                    console.log(err);                }            })        })

$(function{

  $.ajax({})

})

记得外面的$(function{})是加载完文档才执行内部代码,防止文档没加载完,js操作没加载的标签的事情。而想要实现ajax的请求是放在$.ajax({})里面的。ajax是jQuery的方法,需要导入jQuery库文件。刚才犯了个错误,没有放到$.ajax({})里面。

下面就是代码执行后获取到的这个api的数据对象。

对象里有返回错误码,数据内容是个数组(循环数组内容可用foreach方法),对象的方法。

<span role="heading" aria-level="2">ajax使用案例

获取到的数据内容就是这个接口提供的数据内容:

<span role="heading" aria-level="2">ajax使用案例

每条数据内容也就是访问的那个接口的数据内容。

<span role="heading" aria-level="2">ajax使用案例

然后获取res对象里的data,

        $(function () {
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    console.log(res.data);
                },
                error:function f1(err) {
                    console.log(err);
                }
            })
        })

它是个数组,想要循环操作每个元素可以用 数组方法

数组对象.forEach(function (item,index) {

} //item是每个对象,index是这个每个对象的索引

<span role="heading" aria-level="2">ajax使用案例

我点击开发者工具它是怎么知道显示工具里面的内容,需要知道你点击的是哪个id的数据,然后根据开发者工具这条数据的表id来进行两表之间的查询的。所以插入的li标签比如开发者工具,要将这个api返回的数据中的id数作为开发者工具这个li的一个属性记录下来。点击事件反生时就根据获取到的id属性值,来显示另一个表中相同这个外键id的数据表内容。

<span role="heading" aria-level="2">ajax使用案例

 

因此,需要将1处的每条数据的id放到生成的li标签属性内。而显示的内容通过接口返回的数据可知是name。

 <span role="heading" aria-level="2">ajax使用案例

生成每条数据要追加到模板html中的指定标签显示。以下总结代码在如下:

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        //         {
        //     "error_no": 0,
        //     "data": [{
        //         "id": 1,
        //         "name": "Python",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 2,
        //         "name": "Linux运维",
        //         "hide": false,
        //         "category": 4
        //     }, {
        //         "id": 4,
        //         "name": "Python进阶",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 7,
        //         "name": "开发工具",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 9,
        //         "name": "Go语言",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 10,
        //         "name": "机器学习",
        //         "hide": false,
        //         "category": 3
        //     }, {
        //         "id": 11,
        //         "name": "技术生涯",
        //         "hide": false,
        //         "category": 1
        //     }]
        // }
        $(function () {
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    console.log(res);
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li id=${item.id}>${item.name}</li>`).appendTo('#box ul')
                        })
                    }
                },
                error:function f1(err) {
                    // console.log(err);
                }
            })
        })
    </script>
</body>
</html>

View Code

 $(function () {            $.ajax({                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',                methods:'get',                success:function(res){                    console.log(res);                    if(res.error_no===0){                        res.data.forEach(function (item,index) {                            $(`<li id=${item.id}>${item.name}</li>`).appendTo('#box ul') })                    }                },                error:function f1(err) {                    // console.log(err);                }            })        })

这里使用的方法如下:

 $(`<li id=${item.id}>${item.name}</li>`).appendTo(‘#box ul’)

子.appendTo(父) ;子是jq对象,是生成的li标签,是反引号引起来的;获取后台的数据是每条数据.字段 ;变量数据引入是${后台数据变量} ;父是引号括起来的选择器。 

所有数据是res返回数据中的data,res.data获取;对象获取其中的属性值,由于不是方法,无需加(),直接对象.属性,属性可以是很多类型的数据,而不只是数字字符串,也可以是数组,对象等;

这里data是数组,res.data是数组,数组循环每个元素可以是数组.forEach() 。forEach方法中是匿名函数forEach(function(item,index){}),匿名函数两个参数,item是数组每个元素,index是这个元素的索引,函数中对单个数组元素写代码做操作就是对所有数组元素做相同的操作;这里做的是对每个元素做添加li标签并追加到id是box下的ul中,显示返回数据中所有的name并记录是哪条数据的(通过id区分)。

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

 获取到的每条数据是item,每个item是个对象,获取这条数据中的值是,这条数据对象.属性 。这里是item.name

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

我点击一下python出现一个sub_category是1,点击一下运维出现一个sub_category是2。点击右下角首页中获得的  字段是用来拼接用的,为什么不一致就不得而知了。好像是category是父,拼接那里是sub_category是子的值

<span role="heading" aria-level="2">ajax使用案例

这里就是拼接用的,后台获取到的字段category就是是拼接用的值。

<span role="heading" aria-level="2">ajax使用案例

 id属性值赋予也可以单独用attr来设置。 //疑问attr可以连着用么,一行代码连着设置多个属性?

注意这里,在反引号里面需要${变量}引用,在外面似乎是不需要的,这里在外面是加了${}报错语法问题。在反引号外面这个变量不加${}才是对的。//疑问,${}引用变量只是反引号中引的吗?

<span role="heading" aria-level="2">ajax使用案例

后面再使用attr添加属性也是可以的。

<span role="heading" aria-level="2">ajax使用案例

看下面:

<span role="heading" aria-level="2">ajax使用案例

获取到的这里缺少一个全部,那么用ajax直接给获取到的数组里面添加一个对象数据,id为0,name为全部。因为这里创建的li标签我只用了id和name变量,所以只要有这两个变量就好。

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        //         {
        //     "error_no": 0,
        //     "data": [{
        //         "id": 1,
        //         "name": "Python",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 2,
        //         "name": "Linux运维",
        //         "hide": false,
        //         "category": 4
        //     }, {
        //         "id": 4,
        //         "name": "Python进阶",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 7,
        //         "name": "开发工具",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 9,
        //         "name": "Go语言",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 10,
        //         "name": "机器学习",
        //         "hide": false,
        //         "category": 3
        //     }, {
        //         "id": 11,
        //         "name": "技术生涯",
        //         "hide": false,
        //         "category": 1
        //     }]
        // }
        $(function () {
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:0,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                    // console.log(err);
                }
            })
        })
    </script>
</body>
</html>

View Code

               res.data.unshift({                        id:0,                        name:'全部'                    })

<span role="heading" aria-level="2">ajax使用案例

是这个0吗?

<span role="heading" aria-level="2">ajax使用案例

 

既然已经获取到了1处的数据并显示出来了,那么需要获取2处的数据并显示出来。这样的话可以再写一个ajax请求,1,2处的api是不同的。

<span role="heading" aria-level="2">ajax使用案例

获取2处的数据写第二个ajax请求。这个api下面的4,

<span role="heading" aria-level="2">ajax使用案例

请求获得的数据是全部的:

<span role="heading" aria-level="2">ajax使用案例

api中的sub_category=0中的这个0是需要拼接的。那么要在全局var定义一个sub_category,让它默认是0,就是显示下面的全部。再将全局的这个sub_category赋值给全部的id。这样就能显示出全部的下面的内容。

然后将第二个ajax的请求api使用拼接的url,因为拼接用了变量,‘’变成反引号。

这里sub_category是0.获取到全部内容。

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        //         {
        //     "error_no": 0,
        //     "data": [{
        //         "id": 1,
        //         "name": "Python",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 2,
        //         "name": "Linux运维",
        //         "hide": false,
        //         "category": 4
        //     }, {
        //         "id": 4,
        //         "name": "Python进阶",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 7,
        //         "name": "开发工具",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 9,
        //         "name": "Go语言",
        //         "hide": false,
        //         "category": 1
        //     }, {
        //         "id": 10,
        //         "name": "机器学习",
        //         "hide": false,
        //         "category": 3
        //     }, {
        //         "id": 11,
        //         "name": "技术生涯",
        //         "hide": false,
        //         "category": 1
        //     }]
        // }
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                    // console.log(err);
                }
            })
            $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                }
            })
        })
    </script>
</body>
</html>

View Code

<span role="heading" aria-level="2">ajax使用案例

 

21条数据就是下面全部的数据。

<span role="heading" aria-level="2">ajax使用案例

<span role="heading" aria-level="2">ajax使用案例

那么现在是点python,下面就显示python的,点运维下面就显示运维的。既然要显示,下面是有个div的,div里面有个ul,ul下有存放多个python或运维等的相关内容的li。

 现在以标题为例,只写这个标题

<span role="heading" aria-level="2">ajax使用案例

只看第一条数据:红框里1就是表的一条记录。这个表又关联了一张表   2能看出来

<span role="heading" aria-level="2">ajax使用案例

下面红框就是又关联的另一张表:

<span role="heading" aria-level="2">ajax使用案例

关联的另一张表是在也面这里进行展示的:

<span role="heading" aria-level="2">ajax使用案例

注意res返回的数据中有data属性和data方法,我们使用数据用的是data属性,直接res.data就代表了数据,不加括号。这里的res.data是个数组,循环数组元素要res.data.forEach(function(item,index){})

 然后要做的是生成子追加到父;子是生成子标签,子标签要用到反引号,子中要用到变量使用${},子中可以插入两层子;父只是写选择器,不写对象;每个数组元素使用变量,item每个数组元素对象,取里面的属性值就item.属性。

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <div class="content">
        <ul>
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                }
            })
            $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')
                        })
                    }
                }
            })
        })
    </script>
</body>
</html>

View Code

$.ajax({                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,                methods:'get',                success:function (res) {                    console.log(res);                    if(res.error_no===0){                        res.data.forEach(function (item,index) {                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul') })                    }                }            })

结果:

<span role="heading" aria-level="2">ajax使用案例

注意:是if(res.错误_no===0),不要总写成错误码。

<span role="heading" aria-level="2">ajax使用案例

现在显示的是全部的,想要的是点击python,只显示Python的,把其它的都排除掉了;点击运维,只显示运维的,把其它的都排除掉了,这个需要后端去过滤。那么需要给这里的每个li标签绑定一个click事件。

         $('#box ul li').click(function () {
                
            })

点击事件做的就是每次执行改变sub_category=${sub_category}这个值

<span role="heading" aria-level="2">ajax使用案例

写点击事件,就是在函数作用域里获取点击对象的id,然后将id赋值给sub_category变量,这样请求的url即改变了。但是这样的话前面的代码在后面又要写一遍。

<span role="heading" aria-level="2">ajax使用案例

那么就把前面的代码写成函数,进行调用。然后后面点击事件,先修改sub_category为点击标签的id属性值,然后再调用函数,做同样的步骤显示数据。

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <div class="content">
        <ul>
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                }
            })
            getCourseList(sub_category )
            function getCourseList(sub_category){
                $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')
                        })
                    }
                }
            })
            }

            $('#box ul li').click(function () {
                sub_category=$(this).attr('id')
                getCourseList(sub_category)
            })
        })
    </script>
</body>
</html>

View Code

 getCourseList(sub_category )            function getCourseList(sub_category){                $.ajax({                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,                methods:'get',                success:function (res) {                    console.log(res);                    if(res.error_no===0){                        res.data.forEach(function (item,index) {                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')                        })                    }                }            })           }           $('#box ul li').click(function () {                sub_category=$(this).attr('id')                getCourseList(sub_category)            })        })

但是没有生效,点击python之后下面的数据还是没有发生改变。因为创建li标签还没有从后端拿到数据创建出来,下面的点击事件就已经生成了。所以相当于没绑定。自己做不了的事情,交给其它人去做,事件委托,事件代理。事件具有传播性,点击的是li标签,它往父集上去传播,还能往父的父传播等等。既然这样,就不给li绑定事件了。往父ul上绑定事件。

 

点击之后已经添加了,在原来的基础上追加的,那么需要先清空再创建li标签

 

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <div class="content">
        <ul>
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                }
            })
            getCourseList(sub_category )
            function getCourseList(sub_category){
                $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')
                        })
                    }
                }
            })
            }

            $('#box ul ').on('click','li',function () {
                var sub_category=$(this).attr('id')
                console.log(sub_category);
                getCourseList(sub_category)
            })
        })
    </script>
</body>
</html>

View Code

      $('#box ul ').on('click','li',function () {                sub_category=$(this).attr('id')                console.log(sub_category);                getCourseList(sub_category)            })

上面的那个错了。   $(父选择器).on(‘事件’,‘标签’,匿名函数)  //错选择的是li而不是ul标签。

<span role="heading" aria-level="2">ajax使用案例

代码如下;

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <div class="content">
        <ul>
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                }
            })
            getCourseList(sub_category )
            function getCourseList(sub_category){
                $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                    if(res.error_no===0){
                        $('.content ul').empty()
                        res.data.forEach(function (item,index) {
                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')
                        })
                    }
                }
            })
            }

            $('#box ul ').on('click','li',function () {
                sub_category=$(this).attr('id')
                console.log(sub_category);
                getCourseList(sub_category)
            })
        })
    </script>
</body>
</html>

View Code

   getCourseList(sub_category )            function getCourseList(sub_category){                $.ajax({                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,                methods:'get',                success:function (res) {                    console.log(res);                    if(res.error_no===0){                        $('.content ul').empty() res.data.forEach(function (item,index) {                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')                        })                    }                }            })            }            $('#box ul ').on('click','li',function () {                sub_category=$(this).attr('id')                console.log(sub_category);                getCourseList(sub_category)            })

<span role="heading" aria-level="2">ajax使用案例

这就是ajax,这就是前端工程师的工作。他们大部分都是写页面,做兼容,做移动端,pc端。再一个就是交互。后端写出地址栏这种接口之后,前端就拿ajax去请求你的接口,然后进行dom操作。

dom操作就是对属性,对值,对类等做的操作

比如这里,点击之后只有这一个变了颜色,就要用到那个兄弟选择器,排他思想的做法

<span role="heading" aria-level="2">ajax使用案例

做前后端分离的,一定需要ajax去写的,前端专门写ajax,后端专门写接口。djonge框架不是前后端分离的。它是后端写的前端,直接用服务器渲染出来的。

4、最终代码:

<span role="heading" aria-level="2">ajax使用案例
<span role="heading" aria-level="2">ajax使用案例

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>魔降风云变</title>
</head>
<body>
    <div id="box">
        <ul>
            <!--向导-->
        </ul>
    </div>
    <div class="content">
        <ul>
        </ul>
    </div>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
            var sub_category=0
            $.ajax({
                url:'https://www.luffycity.com/api/v1/course_sub/category/list/',
                methods:'get',
                success:function(res){
                    res.data.unshift({
                        id:sub_category,
                        name:'全部'
                    })
                    if(res.error_no===0){
                        res.data.forEach(function (item,index) {
                            $(`<li >${item.name}</li>`).appendTo('#box ul').attr('id',item.id)
                        })
                    }
                },
                error:function f1(err) {
                }
            })
            getCourseList(sub_category )
            function getCourseList(sub_category){
                $.ajax({
                url:`https://www.luffycity.com/api/v1/courses/?sub_category=${sub_category}&ordering=`,
                methods:'get',
                success:function (res) {
                    console.log(res);
                    if(res.error_no===0){
                        $('.content ul').empty()
                        res.data.forEach(function (item,index) {
                            $(`<li><h6>${item.name}</h6></li>`).appendTo('.content ul')
                        })
                    }
                }
            })
            }

            $('#box ul ').on('click','li',function () {
                sub_category=$(this).attr('id')
                getCourseList(sub_category)
            })
        })
    </script>
</body>
</html>

View Code

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155335.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 各种常用不等式汇总「建议收藏」

    各种常用不等式汇总「建议收藏」对数学中常用的不等式进行了汇总,目前只有结论,没有证明

  • Flow Control(流控)

    Flow Control(流控)Backpressure(背压)只是解决FlowControl的其中一个方案。就像小学做的那道数学题:一个水池,有一个进水管和一个出水管。如果进水管水流更大,过一段时间水池就会满(溢出)。这就是没有FlowControl导致的结果。而解决FlowControl有几种思路呢?(1)Backpressure,就是消费者需要多少,生产者就生产多少。这有点类似于TCP里的流量控制,接收方根据自己的…

  • 在国内怎么用netflix(netflix为什么在中国用不了)

    SpringClound和SpringBoot集成时Idea报错:Cannotresolveorg.springframework.cloud:spring-cloud-starter-netflix-eureka-server:unknown原因分析:找不到依赖的jar包查看配置的依赖SpringBoot的版本:2.0.7.RELEASESpringCloud的版本:Finchley.RC1它们不匹配造成异常解决方案:更改SpringCloud的版本为Finch

  • EagleEye_eyekey

    EagleEye_eyekey摘要:EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用,保障了各个系统的稳定性,为整个技术团队打赢这场战役保驾护航。作者:王华锋(水彧)背景 双十一一直是阿里巴巴集团每年要打的一场大战役。要打赢这场战役,技术上,不仅仅是几个应用、几个

  • Fiddler安装教程(图文版)「建议收藏」

    Fiddler安装教程(图文版)「建议收藏」本章教程,主要介绍如何在windows10系统上安装Fiddler。一、Fiddler软件简介二、软件官网地址三、图文下载步骤四、软件安装步骤五、结语一、Fiddler软件简介Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。Fiddler要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好…

    2022年10月22日
  • 网络编程学习笔记一:Socket编程

    网络编程学习笔记一:Socket编程“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号