我使用jQuery将新数据添加到数据库表。然后我从该表中获取所有内容。问题是我每隔一段时间就会得到错误的数组大小。如果我刷新页面它的数组大小正确,但是当我点击带有jQuery功能的按钮时,它就搞砸了。
我弄明白了
$n = mysqli_num_rows($result);
已经返回了错误的行数
这是脚本:
$(document).ready(function(){
$.getallentries = function(){
$.getJSON("entries.php",{action : "getall"},function(data) {
var content_array = $.map(data, function(e) { return e;});
console.log(content_array.length); // to check array size
});
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"});
};
};
$("#adds").on("click",function(){
$.addstatic();
$.getallentries();
});
$.getallentries();
这是entries.php:
function getall(){
$link = db_connect();
$query= "SELECT * FROM jq";
$result = mysqli_query($link,$query, MYSQLI_STORE_RESULT);// Smart people said MYSQLI_STORE_RESULT should help but it didn't
$n = mysqli_num_rows($result);
for($i = 0 ;$i<$n;$i++)
{
$row=mysqli_fetch_assoc($result);
$b[]=$row;
}
echo json_encode(array($b));
}
function addstatic(){
$link = db_connect();
$statin_Entry = "Static Entry";
$query = "INSERT INTO jq (Entry) VALUES ('$statin_Entry')";
$result = mysqli_query($link,$query);
}
if(isset($_GET['action']) && !empty($_GET['action'])) {
$action = $_GET['action'];
switch($action) {
case 'getall' : getall(); break;
}
}
else {
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'addstatic' : addstatic();break;
case 'removelast' : removelast();break;
// ...etc...
}
}
}
所以问题再次出现,相同的数组大小为143,146,151,其中156 =
答案 0 :(得分:0)
您应该在$.getallentries
AJAX调用的回调函数中调用$.addstatic
,以便它在$.addstatic
完成数据库更新后运行。
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"}, $.getallentries);
};
在获取行之前无需使用mysqli_num_rows
。你应该使用这样的循环:
while ($row = mysqli_fetch_assoc($result)) {
$b[] = $row;
}
此外,您将数组包装在另一个数组中。只是做:
echo json_encode($b);
您编写的方式,console.log(content_array.length)
应始终记录1
,我不了解您是如何获得更高的数字。您确定发布了实际代码吗?
没有使用点$.map
,它所做的只是制作data
数组的副本。只需使用data
本身。
在PHP中,您不需要同时测试isset()
和!empty()
,因为empty()
会检查变量是否先设置。
您不需要使用MYSQLI_STORE_RESULT
,它是该选项的默认设置。