繁体   English   中英

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

[英]Getting wrong array length with jQuery and mysqli_num_rows()

我正在使用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是??

你应该在$.addstatic AJAX调用的回调函数中调用$.getallentries ,以便它在$.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 ,它是该选项的默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM