2009-03-06 119 views
1

我有一个JavaScript幻灯片,它预先将图像从MySQL数据库中加载出来,然后一次显示在HTML文档的图像标记中。简而言之,它通过预加载图像(如许多幻灯片教程显示在网络上)来实现此目的,但不是使用静态图像(即images/image1.jpg等),而是使用通过PHP提供的动态图像(即getData.php?n = 1)getData.php脚本在服务器上运行,并为预加载的每个图像打开到数据库的新连接。动态JavaScript幻灯片

有没有办法避免与数据库建立如此多的连接,并且每个连接只对图像数据库使用LIMIT n,1进行单个查询?

看来,如果我打算使用getData.php作为image.src,那么getData.php需要一次返回一个图像!我真的想以10个块为单位获取它们,然后将它们分配给客户端的Image()对象。我认为这会更快,因为当我在python中编写客户端应用程序来显示图片(当然在浏览器之外)时,10个左右的块传输得更快(并且减少了mySQL服务器上的负载)。我可以用JavaScript和PHP来完成这项工作吗?我在两者之间使用XML吗?如果我可以通过AJAX将二进制图像数据转换为JavaScript,我可以用它做任何事情吗?我错过了JavaScript中的imagecreatefromstring()函数吗?

我可以自己弄清楚确切的代码,但我是网络编程的新手,需要关于如何解决这个问题的提示!我想我错过了一些主要框架。对于这个问题,我需要ActionScript还是JavaScript以外的其他东西?提前感谢提示!

编辑:我喜欢这第一个建议,我想我可以做到这一点。它也将使我也跟随亚历克斯shishkin的建议,以避免LIMIT n,1查询(我确实想保留SQL BLOB字段尽管)的一部分,但我怎么把二进制数据从XML到JavaScript中的Image()对象?

+0

也许这里?: 来自服务器的图像,我喜欢这个建议,我想我能弄完。它也将使我也遵循亚历克斯shishkin的建议,以避免LIMIT n,1查询(我确实希望保留SQL BLOB字段尽管)的一部分但我怎么把二进制数据从XML到XML中的Image()对象?谢谢! – agartland 2009-03-06 18:10:23

回答

2

我会说:

  • 有访问getdata.php生成包含下10张图像的XML文件。
  • 有javascript来从AJAX请求获取XML响应getData.php。
  • 逐个遍历XML响应中的图像,当显示第九个图像时,查询下一组图像的getData.php。

至于框架:我的建议是使用JQuery的AJAX请求和图像显示和预加载。


您可以使用像base64这样的二进制到文本编码来通过XML传递二进制数据。在大多数的浏览器,你可以通过自己使用的base64解码,并把它传递给图像对象,像这样:

<img src="data:image/jpeg;base64,your binary data comes here"> 

这会,但在所有的Internet Explorer,则可以通过院长爱德华兹用neat trick传递的base64数据回到IE模块的PHP模块:)

使用jQuery和PHP的简单图像(没有幻灯片...这只是我的测试代码)的代码看起来是这样的:

PHP:

<?php 
    echo base64_encode(file_get_contents("image.jpg")); 
?> 

JS/JQuery的:

$(document).ready(function() { 
    $.get("image.php", function(data) { 
     $(document).append("<img src=\"data:image/jpeg;base64,"+ data +"\">"); 
    }); 
}); 
+0

我喜欢这个建议,我想我可以做到这一点。它也将使我也跟随亚历克斯shishkin的建议,以避免LIMIT n,1个问题(我想保留SQL BLOB字段尽管)的一部分 但是,如何将XML中的二进制数据粘贴到JavaScript中的Image()对象?谢谢! – agartland 2009-03-06 18:09:40

0

使用二进制图像,并 “限制N,1” - 很糟糕的解决方案

为什么你的图像没有存储在数据库中作为图像的链接?并且图像必须存储在文件系统上。 像“Limit n,1”这样的查询确实很慢,特别是在大桌子上。 您需要使用大偏移量的小查询,而不是使用小偏移量的许多查询,并将php数据打包为json格式以发送到javascript。 (例如限制为100) 发送其中一个图像的ajax请求非常精彩。

不错的幻灯片放映你可以在这里找到 - plugins.jquery.com。

0
  1. 创建一个网页。
  2. 让页面连接到服务器并获取带有图像ID的XML或JSON。
  3. 请求使用ID从步骤2