mysql select *不是最新的

时间:2014-12-02 18:22:26

标签: php mysql

我的表中有关于我的sql实体的问题。

我有2个php脚本,一个向表中添加新项目,另一个获取所有项目并将它们作为json返回。

返回脚本需要一些时间来返回实际的条目。我的意思是,如果我在表中添加或删除entrie,我的返回脚本仍会在删除/添加之前显示我的条目。经过一段时间后,它得到了正确的结果,但我无法解释原因。

这是我的返回代码:

$con = new mysqli($servername, $username, $password, $dbname);
if (!$con) {
  die('Could not connect: ' . mysqli_error($con));
}

mysqli_select_db($con,"Einkaufsliste");
$sql="SELECT * FROM Einkaufsliste";
$result = $con->query($sql);

while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $rows[] = $row;
}

$items = array();
foreach($rows as $row){
    $row_array['item'] = $row['item'];
    array_push($items, $row_array);
}
echo json_encode($items);
/*echo "bla";*/

$con->close();

所以,如果我在我的表中有3个项目并且我添加一个,我的返回值仍然是3.如果我通过phpmyadmin检查我的数据库有4个条目。

我忘了提到这是我如何通过jscript

拉取我的结果
function showItems() {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            //document.getElementById("test").innerHTML = xmlhttp.responseText;
            //alert(xmlhttp.responseText);
            document.getElementById("itemList").innerHTML = "";

            var res = JSON.parse(xmlhttp.responseText);
            alert(res);
            for(var k = 0; k < res.length; k++){
                $('#itemList').append('<li><a href="#">'+res[k].item+'</a><a class="deleteMe"></a></li>').listview('refresh');
            }
        }
    };
    xmlhttp.open("GET","getItems.php",true);
    xmlhttp.send();
}

1 个答案:

答案 0 :(得分:0)

在输出ajax响应的页面中添加no-cache标头:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

或者在ajax调用中添加一个带有时间戳的参数,这样每个请求都将被视为唯一并单独缓存,从而产生关闭缓存的错觉:

var d = new Date();
xmlhttp.open("GET", "getItems.php?t="+d.getTime(), true);

或两者兼而有之。