2013-06-04 60 views
4

我有一個CodeIgniter PHP應用程序,它顯示兩個電影封面。在他們旁邊是一個「隨機電影」按鈕,它使用AJAX將兩部電影替換爲一組新電影。您可以繼續單擊此按鈕,並一遍又一遍地看到它繼續替換電影封面的圖像。前兩個要顯示的封面設置爲默認值,並且在用戶點擊隨機電影按鈕後不應顯示。問題是這樣的:當點擊隨機電影按鈕時,有時候會有很多次點擊才能最終顯示新的封面。也就是說,同一封面將連續多次返回。兩個不同的封面被調用的網址略有不同,所以它們很少會同時斷開。這讓我知道它很清爽,但是該函數多次返回相同的電影。如果我直接訪問通過AJAX調用的url,我從來沒有看到這種情況發生,因爲我已經使用Session類存儲了最後一部電影並將其從SQL查詢中排除(即WHERE id NOT IN ($default_movie, $last_movie))。 任何想法爲什麼直接訪問網址會正常工作,但通過AJAX調用時,我看到了這種行爲?隨機SQL記錄,同時排除特定記錄

我知道這可能沒有儘可能清楚,所以讓我知道如果我能澄清一些沒有意義的東西。如果有幫助,我會添加代碼。謝謝朋友!

查詢來獲取隨機的電影:

SELECT * FROM (`movies`) WHERE `id` NOT IN (2, 10) ORDER BY RAND() LIMIT 1 

型號方法:

public function getRandom($count = 1, $featured = FALSE, $series = FALSE, $exclude = 0, $last = 0) { 
     $this->db->order_by('id', 'random'); 
     $this->db->limit(1); 
     $conditions = array(); 
     if ($exclude > 0) { 
      $conditions['id !='] = $exclude; 
     } 
     if ($last > 0) { 
      if (!empty($conditions['id !='])) { 
       $conditionsNotIn = "id NOT IN (" . $conditions['id !=']. ", $last)"; 
       unset($conditions['id !=']); 
       $this->db->where($conditionsNotIn); 
      } else { 
       $conditions['id !='] = $last; 
      } 
     } 
     if ($featured) { 
      $conditions['featured'] = 1; 
     } 
     if ($series) { 
      $conditions['current_series'] = 1; 
     } 
     $movie = $this->db->get_where('movies', $conditions); 
     $movie = $movie->row(); 

     if (!is_null($movie)) { 
      return $movie; 
     } else { 
      return FALSE; 
     } 
    } 
+0

你能發佈完整的SQL查詢 –

+0

你確認AJAX請求是否正確地填充了'$ default_movie'和'$ last_movie'變量? – eggyal

+0

是的,我已經添加了查詢。我還利用CI的log_message()來跟蹤變量每次都在變化。 – JamieHoward

回答

1

任何想法,爲什麼訪問網址直接將正常工作,但是當 通過AJAX調用,我看到這種行爲?

我有一個想法是的。

瀏覽器緩存.. PITA!

儘量明確地關閉緩存:

$.ajaxSetup({cache: false}); 

把你的Ajax請求之前,假設你使用jQuery。

如果你不是,你需要追加一些隨機變量的URL,這使瀏覽器緩存請求。