Javascript 使用jQuery和mysqli_num_rows()获取错误的数组长度

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

我正在使用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...
        }
    }
}
函数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