2013-06-02 31 views
-1

有没有办法返回一个一个一个地对应于获取行的字符串数组?检索数据的Ajax问题

基本上,如果我想从我的数据库中检索所有行,我做这样的事情:

$.post('my_script.php', {id:id}, function(data){ 
    $('#container').html(data); 
}); 

my_script.php

<?php 
    $id = $_POST['id']; 
    $query = "SELECT image_name FROM my_list WHERE id=$id"; 

    if($mysql_query = mysql_query($query)){ 
     while($mysql_fetch_assoc = mysql_fetch_assoc($mysql_query)){ 
      $mysql_result_name = $mysql_fetch_assoc['image_name']; 
      echo "<img src='".$mysql_result_name."'/>"; 
} 
} 
?> 

关于这个问题在于,它只要这条语句(while($ mysql_fetch_assoc = mysql_fetch_assoc($ mysql_query)))没有完成,就会显示几秒的空白页面。这绝对不利于用户。如果他们准备好显示,我至少要逐一显示图像。

+0

你可能想看看这个:http://stackoverflow.com/q/13250976/218196。 –

+1

a。你说你想要检索所有的记录,但是你的查询正在检索一个唯一的id - 即只有一个记录(也就是说,如果你把'id = id'改为'id = $ id')。湾总是更好地返回纯数据(例如图像路径数组)并处理客户端的HTML混乱。 C。您只能通过发送多个ajax请求来逐个检索。 – Matanya

+0

imgur.com是如何做到的?如果您查看此页面(http://imgur.com/gallery/YHHtxfV),您会注意到右侧的侧栏缩略图,如果您反复点击下一页,图像逐个显示,则速度足够快。他们怎么做呢?因为我正在寻找类似的东西。 – user2310422

回答

1

这基本上是不可能的,因为PHP是服务器端语言,因此数据在完成脚本时可用。

所以你不能做这样的事情,要等到剧本完成

或者你可以设置AJAX以便它将检索行一个接一个,那就是来解决在我的脑海里。

编辑:

作为一个更好的解决方案,你可以追加一个flush()while结束,使其打印图像时,它已经准备好,但它不是一个100%的解决方案。它可能会或可能无法工作,具体取决于您的服务器以及您从中调用PHP页面的方法。例如对于AJAX,您的success函数将不会被调用,直到它收到来自服务器的200 OK响应,该响应在页面完全加载时发送。

编辑的代码:

<?php 
    $id = $_POST['id']; 
    $query = "SELECT image_name FROM my_list WHERE id=id"; 

    if($mysql_query = mysql_query($query)){ 
     while($mysql_fetch_assoc = mysql_fetch_assoc($mysql_query)){ 
      $mysql_result_name = $mysql_fetch_assoc['image_name']; 
      echo "<img src='".$mysql_result_name."'/>"; 
      flush(); 
} 
} 
?> 
+0

imgur.com是怎么做到的呢?如果您查看此页面(http://imgur.com/gallery/YHHtxfV),您会注意到右侧的侧栏缩略图,如果您反复点击下一页,图像逐个显示,则速度足够快。他们怎么做呢?因为我正在寻找类似的东西。 – user2310422

+0

PHP不会加载图像。它只是发送应该呈现给浏览器的HTML代码。您的浏览器然后呈现该HTML,然后尝试加载图像。在IMGUR中,它实际上是在同一时间显示所有图像,并且不会逐个加载它们。这是您的浏览器尝试一个接一个地加载它们。因为你没有足够的带宽在瞬间加载它们。如果你有更好的连接,他们会一次加载全部。 –

+0

当我执行上面的代码时,它会慢多少?这是我在我的页面上唯一的代码。当我去imgur时,速度要快很多。所以互联网连接不是这里的问题。 – user2310422