Javascript 使用jQuery和mysqli_num_rows()获取错误的数组长度
我正在使用jQuery向数据库表添加新数据。然后我将从该表中获取所有内容。问题是我每次都会得到错误的数组大小。如果我刷新页面,它会得到正确的数组大小,但当我用jQuery函数单击按钮时,它就乱七八糟了 我明白了Javascript 使用jQuery和mysqli_num_rows()获取错误的数组长度,javascript,php,jquery,Javascript,Php,Jquery,我正在使用jQuery向数据库表添加新数据。然后我将从该表中获取所有内容。问题是我每次都会得到错误的数组大小。如果我刷新页面,它会得到正确的数组大小,但当我用jQuery函数单击按钮时,它就乱七八糟了 我明白了 $n = mysqli_num_rows($result); 已返回错误的行数 以下是脚本: $(document).ready(function(){ $.getallentries = function(){ $.getJSON("entries.php
$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...
}
}
}
函数getall(){
$link=db_connect();
$query=“从jq中选择*”;
$result=mysqli_query($link,$query,mysqli_STORE_result);//聪明人说mysqli_STORE_result应该有帮助,但没有
$n=mysqli\u num\u行($result);
对于($i=0;$i您应该在
$.addstatic
AJAX调用的回调函数中调用$.getallentries
,以便它在$.addstatic
完成数据库更新后运行
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"}, $.getallentries);
};
在获取行之前,不需要使用mysqli\u num\u rows
。您应该使用如下循环:
while ($row = mysqli_fetch_assoc($result)) {
$b[] = $row;
}
另外,您正在将数组包装到另一个数组中。只需执行以下操作:
echo json_encode($b);
按照您编写的方式,console.log(content\u array.length)
应该总是记录1
,我不明白您是如何得到更高的数字的。您确定发布了实际的代码吗
使用$没有意义。map
,它所做的只是复制数据
数组。只需使用数据
本身
在PHP中,不需要同时测试isset()
和!empty()
,因为empty()
会检查变量是否先设置好
您不需要使用
MYSQLI\u STORE\u RESULT
,它是该选项的默认值。您应该在$.addstatic
AJAX调用的回调函数中调用$.getallentries
,以便它在$.addstatic
完成数据库更新后运行
$.addstatic = function(){
$.post("entries.php",{action : "addstatic"}, $.getallentries);
};
在获取行之前,不需要使用mysqli\u num\u rows
。您应该使用如下循环:
while ($row = mysqli_fetch_assoc($result)) {
$b[] = $row;
}
另外,您正在将数组包装到另一个数组中。只需执行以下操作:
echo json_encode($b);
按照您编写的方式,console.log(content\u array.length)
应该总是记录1
,我不明白您是如何得到更高的数字的。您确定发布了实际的代码吗
使用$没有意义。map
,它所做的只是复制数据
数组。只需使用数据
本身
在PHP中,不需要同时测试isset()
和!empty()
,因为empty()
会检查变量是否先设置好
您不需要使用
MYSQLI\u STORE\u RESULT
,它是该选项的默认值。在AJAX调用$.addstatic()之前调用$.getallentries()
已完成,因此数据库尚未更新。请记住,AJAX是异步的。您是否正确复制了代码?$的定义是否正确。addstatic
确实应该在$的定义内。getallentries
?有人向您介绍MYSQLI_STORE_结果,但您调用的不是那么聪明。$.getallentries()
在AJAX调用之前,$.addstatic()
已完成,因此数据库尚未更新。请记住,AJAX是异步的。您是否正确复制了代码?$的定义是否正确?addstatic
真的应该在$的定义内。getallentries
?有人向您介绍MYSQLI_STORE_结果时,他并没有那么聪明为什么在您使用时使用setTimeout
你能像我展示的那样做吗?既然你能像我展示的那样做,为什么还要使用setTimeout
?