当前位置: 首页 > 面试题库 >

通过jQuery Ajax加载图像

桓深
2023-03-14
问题内容

我正在创建一个浏览大量图片的应用程序。至此,项目的那部分完成了,它对正确的图片进行了排序,过滤和加载,甚至将它们拆分为单独的页面以加快加载速度。

效果很好,但每页加载25张图片仍需要8秒钟以上。我已经进行了一些研究,得出的结论是,使用异步jQuery
Ajax请求是最好的方式,以便尽可能快地同时加载所有请求。

到目前为止,这是我的代码:

var imageArray = <?php if (!empty($images)) {echo '["' . implode('", "', $images) . '"]';} else {echo "false";} ?>;
console.log(imageArray);
console.log(imageArray.length);
for (i = 0; i < imageArray.length; i++) {
    $.ajax({
        type: 'GET',
        url: imageArray[i],
        dataType: 'image/jpg',
        async: true,
        success: function (data) {
            $("#" + i).attr("src", data);
        }
    });
}

此代码的问题在于,除了带有灰色边框的空白方形外,它什么也不会加载。当我修改代码并在Chrome的控制台中运行它时,data最终会得到一串混乱的字符,我认为这是原始图像数据。

我已经搜索了好几天,包括SO,但是我还没有找到可以满足我需要的解决方案。相反,我发现了一些解决方案,它们只是使用jQuery将URL放入图像源中attr(),而这并不是我所需要的。

如果任何人都可以提供任何解决方案来修复此代码,或者甚至可以采用其他更有效的方法来获取所有图像,那么我将敞开心open。

imageArrayhttp :
//pastebin.com/03tvpNey

问候,伊曼纽尔


问题答案:

如果您使用的是Base64图像数据(您提到的混杂字符的字符串),则需要使自己img src像这样:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

因此,您的代码应为:

var imageArray = <?php if (!empty($images)) {echo '["' . implode('", "', $images) . '"]';} else {echo "false";} ?>;
console.log(imageArray);
console.log(imageArray.length);
for (i = 0; i < imageArray.length; i++) {
$.ajax({
    type: 'GET',
    url: imageArray[i],
    dataType: 'image/jpg',
    async: true,
    success: function (data) {
        $("#" + i).attr("src", 'data:image/png;base64,'+data);
    }
});
}

但是 ,如果通过AJAX加载图像并使用Base64内容比使用常规<img src="path"/>方法快得多,我会感到非常惊讶。

AJAX的重点是在加载DOM后获取一些数据。所有现代浏览器 已经可以 异步获取图像。我怀疑您是否会看到任何性能提升。

我建议更可能的问题是您的25张图像…我想是作为缩略图显示的…仍然是高分辨率的高分辨率图像。您应该保存较小的“缩略图”版本,然后/如果用户单击缩略图以查看完整尺寸的缩略图,则获取高分辨率图像。

请注意元素ID 可以 以数字开头(或为数字)。这在HTML4中无效,但在HTML5中完全可以。但是,您可能会遇到CSS规则的麻烦-
因此最好在字母前加上前缀(例如i1,i2,i3 …)。



 类似资料:
  • 遇到了一个奇怪的问题,试图通过模型内的url从这里下载任何照片->https://jsonplaceholder.typicode.com/photos,例如“https://via.placeholder.com/150/92c952”,但得到错误: 另外,如果我试图从其他链接加载图像,例如->https://avatars.mds.yandex.net/get-pdb/1088712/8b19

  • 问题内容: 我的Java应用程序有问题,特别是从计算机中的某个位置加载图像时。 在这篇文章之后,我使用和来在计算机上加载图像。首先,我将图片()放入源代码中,并且可以正常工作。但是,如果我将图像放到另一个地方(比如说),Java IDE会向我显示一个 这是代码: 问题答案: &不适用于文件路径,但适用于相对于代码库的路径。如果代码库为,则可以找到资源的相对路径为。 通过加载文件之间..differ

  • 问题内容: 我的问题是我有一个大型画廊,不应在第一页加载时完全加载。因此,我加载了50张图像中的10张,并向其中添加了fancybox。当用户单击下一步按钮时,第11张图像应通过Ajax加载并附加到图库容器中。 问题是fancybox停止在第10张图片,因为它不知道动态加载的图片。 如何将动态加载的图像添加到fancybox2? 目前我有这个: 获取下一张图片:) 之后,我调用loadFancyb

  • 我建立简单的画廊。我使用Glide加载我的照片。在glide加载的图像上,看起来像是某种条纹(像素似乎是可见的)。我试图加载格式已更改的照片,我使用了,但它看起来仍然比原始照片更糟糕。 我用来加载的代码:

  • 问题内容: 好的,所以我对ajax和从外部加载内容还很陌生,希望对我的问题有任何见解。 我目前有一个隐藏的div,它是空的,单击链接后应该在其中加载ajax内容。 我目前有一个链接列表,所有链接都具有相同的类,并且我想在单击空白div时进行幻灯片切换,然后从链接要访问的页面中加载内容。 链接: 当前的jQuery: 刚接触Ajax并加载外部内容时,我想知道如何从位于标签中的链接页面加载内容。因此,

  • 使用Android Universal Image Loader和RecyclerView异步加载图像,我会遇到与其他人相同的错误,图像会混淆;直到它们都加载了一个缓存。 适配器的代码: 我知道它必须是中的某个东西,因为它需要更新每个视图,但我没有正确地更新。 这与图书馆无关。在不缓存图像的情况下执行延迟加载时,也会发生相同的行为。错误是因为我不知道如何更新中的。 谢谢!