强制浏览器重新读取ajax结果

时间:2013-07-19 01:46:22

标签: php mysql ajax browser-cache

每天这个请求的内容都会发生变化:问题是浏览器(肯定是IE和Chrome),总是显示OLD结果(第一次获取),直到我清除缓存!

我该如何解决这个问题???

$('#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 个答案:

答案 0 :(得分:2)

您可以在cache: false来电中设置$.ajax(),或者如果您希望缓存影响您可以执行的给定页面中的所有请求

$.ajaxSetup({ cache: false });

这将向查询字符串添加_=32409035094,该查询字符串是名为_的参数,以及当前时间戳的值。这会创建一个唯一的请求字符串,导致从服务器而不是缓存中读取请求。