2013-07-19 58 views
0

此請求的內容每天都會發生變化:問題在於瀏覽器(確定爲IE和Chrome)總是顯示舊的結果(首先得到),直到我清除緩存爲止!強制瀏覽器重新讀取ajax結果

我該如何解決這個問題?

$('#q').keyup(function(){ 
    var param = $(this).val(); 
    if(param == ''){ 
     return 
    } 

    if(param != ''){ 
     $('#p_a').html(''); 
    } 
    $.ajax({ 
     url: 'ajax.php', 
     data: {qty: param}, 
     type: 'GET', 
     success: function(result){ 
        $('#p_a').html(result); 
       }, 
     error: function(result){ 
        $('#p_a').html('Error'); 
       }, 
    }); 
}); 

PHP:

<?php 
if(isset($_GET['qty'])){ 
    $cq = $_GET['qty']; 
    $cq = $link->real_escape_string($cq); 

    $GetP = $link->query("CALL GetPrice($cq)") or die('Query Error'); 

    if(mysqli_num_rows($GetP) === 1){ 
     while($p = mysqli_fetch_array($GetP)){ 
      echo $p['values']; 
      echo $p['dates']; 
     } 
    }else{ 
     echo 'More Rows'; 
    } 
} 
?> 

編輯:

這是jQuery的功能/右/最佳/良好的工作解決方案嗎?從documentation

cache (default: true, false for dataType 'script' and 'jsonp') Type: Boolean If set to false, it will force requested pages not to be cached by the browser. Note: Setting cache to false will only work correctly with HEAD and GET requests. It works by appending "_={timestamp}" to the GET parameters. The parameter is not needed for other types of requests, except in IE8 when a POST is made to a URL that has already been requested by a GET.

+1

將'cache:false'添加到發送到'.ajax()'調用的參數中。你最好在PHP中適當地設置'Cache'頭部,但這是一個不同的問題。 – 2013-07-19 01:52:04

回答

2

您可以設置cache: false$.ajax()通話或者如果你想緩存影響在給定頁面中的所有請求,你可以做

$.ajaxSetup({ cache: false }); 

這將增加查詢字符串_=32409035094是一個名爲_的參數和當前時間戳的值。這會創建一個唯一的請求字符串,使請求從服務器而不是緩存中讀取。

+0

非常感謝您的詳細解答!我對'PHP'上的'Cache headers'感興趣,他的評論中描述了'Mike W'。你能說更多關於這些標題的內容嗎?謝謝! – Perocat

+1

從我所經歷的不是在這裏玩的PHP緩存標題。如果緩存未設置爲false,則瀏覽器不會發出ajax請求。 – DevZer0

+0

你可以嘗試使用'header(「Cache-Control:no-cache,must-revalidate」)'看看它是否改變了行爲 – DevZer0