2013-06-02 30 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