一个Ajax的Dome

前言

所谓的Ajax其实就是动态的去请求另一个资源站点,然后将资源加载到我们的当前页面中,例如当你点击网页下一页时页面会发生改变,但是却没有发生跳转。这就是Ajax将请求到的资源通过修改当前页面的HTML代码添加进来。

实现

这个实现其实很简单。但是分两种,一种是通过原生的JS来实现,这里我都将举例子,尽管使用jQuery是个不错的选择。

页面布局

先来看看本dome当中的HTML代码

<!DOCTYPE html>
<html lang="zn">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #img_aum {
            position: absolute;
            top: 50px;
            width: 96%;
        }
        
        #more_img {
            background-color: aqua;
            font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
            font-size: large;
            font-style: inherit;
            position: fixed;
            width: 96%;
            height: 40px;
        }
    </style>
</head>

<body>
    <div id="img_aum">

    </div>
    <div>
        <button id="more_img">加载更多</button>
    </div>
</body>

</html>

只有一个按钮,除此之外别无其它。

原生JS实现Ajax

在这里我必须先说明一下一个报错。那就是跨站点资源请求的错误,当你使用跨站点的请求时,浏览器会自动进行检测,那就意味着你所连接使用的第三方接口返回的数据很有可能会被浏览器拦截。
通过测试,我选择了下面的这个接口

https://img.xjh.me/random_img.php?return=json&type=bg&cytpe=acg

值得一提的是,这个接口如果你使用原生的JS进行实现的话,很有可能也会被拦截,至少在我这里是这样的,此外这个接口访问较为缓慢。
当然在看代码之前可以先看看原生JS的流程图
在这里插入图片描述

<script>
    const button = document.getElementById("more_img")
    const imgDiv = document.getElementById("img_aum")

    function getImg(num) {
        let xhr = new XMLHttpRequest()
        let url = "https://img.xjh.me/random_img.php?return=json&type=bg&cytpe=acg"
        xhr.open('get', url, true)
        xhr.send(null)
        xhr.addEventListener("readystatechange", () => {
            if (xhr.readyState == 4 && xhr.status == 200) {
                let img = document.createElement("img")

                let imgUrl = JSON(xhr.responseText)
     
                img.width = 290
                img.height = 400
                img.style.marginLeft = 10
                img.scr = imgUrl.img //获取节点内容


                imgDiv.insertBefore(img, imgDiv.firstChild)
            }
        })
    }
    (function() {
        let num = 0
        button.addEventListener("click", () => {
            for (let i = 0; i < 10; i++) {
                num += 1
                getImg(num)
            }
        })
    })()
</script>

这段代码很有可能失败,主要原因是API接口的问题和原生JS处理的某些问题
在这里插入图片描述

使用Jquery实现

由于在这里是get请求,并且返回的是json数据格式,所以我直接使用getJSON来实现

<script>
    const apiUrl = "https://img.xjh.me/random_img.php?return=json&type=bg&cytpe=acg"

    function showImg() {
        for (let i = 0; i < 10; i++) {
            $.getJSON(apiUrl, (json) => {
                $("#img_aum").prepend($("<img>").attr("src", json.img).attr("width", 450))
            })
        }

    }

    $(() => {
        showImg()
        $("#more_img").on("click", () => {
            showImg()
        })
    })
</script>

在这里插入图片描述

以下是一个简单的 Vue 动态路由的示例: 假设我们有一个用户列表,我们希望用户能够点击列表中的某个用户,然后跳转到该用户的详细信息页面。我们可以使用 Vue 动态路由来实现这个功能。 首先,我们需要定义路由: ``` const routes = [ { path: '/users', name: 'Users', component: Users }, { path: '/users/:id', name: 'UserDetail', component: UserDetail, props: true } ] ``` 在上面的代码中,我们定义了两个路由,一个是用户列表页面的路由,另一个是用户详情页面的路由。注意,我们在第二个路由中使用了动态路由参数 `:id`。 然后,我们需要创建两个组件,一个是用户列表组件,另一个是用户详情组件: ``` <template> <div> <h2>Users</h2> <ul> <li v-for="user in users" :key="user.id"> <router-link :to="{ name: 'UserDetail', params: { id: user.id } }">{{ user.name }}</router-link> </li> </ul> </div> </template> <script> export default { data() { return { users: [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie' } ] } } } </script> ``` ``` <template> <div> <h2>User Detail</h2> <p>User ID: {{ $route.params.id }}</p> </div> </template> ``` 在上面的代码中,我们在用户列表组件中使用了 `router-link` 组件来跳转到用户详情页面,并传递了用户的 ID 作为路由参数。 最后,我们需要在 Vue 根实例中注册路由: ``` import Vue from 'vue' import VueRouter from 'vue-router' import Users from './components/Users.vue' import UserDetail from './components/UserDetail.vue' Vue.use(VueRouter) const routes = [ { path: '/users', name: 'Users', component: Users }, { path: '/users/:id', name: 'UserDetail', component: UserDetail, props: true } ] const router = new VueRouter({ routes }) new Vue({ router }).$mount('#app') ``` 现在,我们就可以在浏览器中访问我们的应用,并且可以点击用户列表中的某个用户,然后跳转到该用户的详细信息页面。在用户详情页面中,我们可以使用 `$route.params.id` 来获取路由参数,并展示用户的 ID。 希望这个示例能够对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huterox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值