使用 Ajax 通过 HTTP GET 请求在 HTML 中一次附加 3 个图像

Appending 3 images at once in HTML via HTTP GET request using Ajax

提问人:Aydin 提问时间:5/13/2023 更新时间:5/13/2023 访问量:30

问:

我正在尝试为需要添加到我的 HTML 中的每个图像发送 Ajax 请求。 它的工作方式是 URL:“http://198.245.55.77/mars/camera.php 有 10 个图像,我们可以通过指定其中一个图像的索引(索引从 0 到 9)来获取这些图像。通过合并所有图像,我们获得了 360 度的景观视图,因此每张图像都有一个 36 度的 POV。

我只想在我的页面上获得 108 度的 POV,所以这将是寻找 3 张连续的图像

到目前为止,我的代码是这样的(我也是 Jquery 和 Ajax 的初学者,请耐心等待)

"use strict";
$(function () {
    const MIN = 0;
    const MAX = 9;
    let numeroImage = Math.floor(Math.random() * 8) + 1; // Pige entre 1 et 8 inclusif au hasard
    console.log(numeroImage);
    
    requeteImage(numeroImage);

    $("input[type=button]:eq(0)").on("click", () => {
        if (numeroImage - 1 >= MIN) { numeroImage -= 1; }
        else { numeroImage = MAX };

        requeteImage(numeroImage)
    });

    $("input[type=button]:eq(1)").on("click", () => {
        if (numeroImage + 1 <= MAX) { numeroImage += 1 }
        else { numeroImage = MIN };

        requeteImage(numeroImage)
    });


    function requeteImage(numeroImage) {

        $(".images").html(""); // Supprimer les images précédentes

        for(let i = -1; i < 2; ++i) {

            $.get("http://198.245.55.77/mars/camera.php", { image: numeroImage + i })
            .done((data) => {
                $(".images").append('<img src="data:image/png;base64,' + data + '">');
            })
            .fail((erreur) => {
                console.log(erreur);
            });
        }
    }
});

我首先获取一个从 1 到 8 的随机索引,并在页面完全加载时执行函数 requeteImage 以显示 3 张图像。

问题就从那里开始,我认为这是因为重新执行是异步的,所以不能保证它们以正确的顺序执行。因此,图像并不是真的井然有序

有没有办法在不使用承诺的情况下修复它?

我尝试发出三个单独的请求而不是执行 for 循环,我尝试将它们放在 if 语句中并在前一个请求完成后执行它们,但似乎不起作用。

谢谢!

javascript jquery ajax 异步 获取

评论

1赞 bassxzero 5/13/2023
而不是使用为什么不将图像放在正确的位置,因为您知道它们的索引是什么?$(".images").append
0赞 freedomn-m 5/14/2023
所以,不要用“加载...”来代替。样式图像或微调器。然后(OTTOMH 可能需要捕获$(".images").html("")$(".images >img").attr("src", "data:image/png;base64,....done((data) => $(".images>img").eq(i).attr("src", ....i)
0赞 Aydin 5/14/2023
我只需将 async: false 添加到我的 ajax 请求中即可解决此问题。但是,我想知道是否可以使用它,或者是否不鼓励进行同步ajax请求?

答: 暂无答案