【问题标题】:Is there a way to count how many database results the PHP sends back to jQuery?有没有办法计算 PHP 发送回 jQuery 的数据库结果的数量?
【发布时间】:2017-09-04 05:58:04
【问题描述】:

在我的项目中,我使用 PHP 来查询数据库(在我的例子中是 SELECT)并使用 while 循环来获取每一行,并使用它来回显到 ajax。

就像在我的 PHP 中一样:

$sql = "SELECT * FROM tasks A WHERE A.open = '1'";

$stmt = $pdo->prepare($sql);

$stmt->execute();

while ($row = $stmt->fetch()){
    echo $row["orderDetails"];
}

在我的 HTML 中:

<script>
    $(function(){
        $.ajax({
            method: "POST",
            url: "getDetails.php",
            success: function(backData){
                $("#details").html(backData);
            }
     });
<script>

假设我在数据库中查询任务表中 task.open=1 中的打开任务,然后在每个打开的任务中,我回显给我的 ajax 关于这些任务的详细信息,我的 ajax 将更改 html关于任务详情的 div。

所以基本上,打开任务的数量,也就是 while 循环的数量,就是回显的数量。获取此数字的最佳方法是什么,以便我可以在 html 中显示此处列出了多少任务?

PS:我试图通过在 while 循环内添加一个 while 循环计数器来捕获这个数字,并将这个数字添加到 div 的属性并回显到 ajax,但是,我不知道为什么这个回显会没有发生在我的最后。

谢谢大家!

【问题讨论】:

  • 我找到了一种思路。我将计算我的 html 中有多少个 div。
  • 我突然想到了另一个问题。 html() 是 jquery 实际上会将内容添加到所选元素还是完全替换它?
  • the .html() method's documentation 中所述,它替换了现有内容。
  • 谢谢@nnnnnn,这就是我的想法,但我问这个问题的原因是因为当我在while循环中将数据回显到ajax并在我的jQuery中我选择了具有唯一性的div id 使用 html() 替换内容,div实际上会加起来就是前端的回显数。如果是替换内容,为什么不只显示最后一个回显内容,而不是显示所有回显??
  • 浏览器不会单独接收回声,它会从服务器接收单个响应,其中包括所有连接在一起的回声的文本。浏览器无法知道(也不关心)PHP 是使用单个 echo 语句还是循环,或者两者都不使用。

标签: php jquery ajax while-loop


【解决方案1】:

您要做的是发回正确的 JSON 响应,然后您可以使用 length 属性来检查有多少项目。您不需要循环来执行此操作,只需使用 PDO 的 fetchAll method。由于您只选择一列,因此可以将其作为字符串数组获取。

<?php
$sql = "SELECT orderDetails FROM tasks WHERE open=1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
header("Content-Type: application/json");
echo json_encode($array);

现在你有了一个字符串数组,你可以用它做你想做的事,包括getting its length

<script>
$(function(){
    $.ajax({
        method: "POST",
        url: "getDetails.php",
        success: function(backData) {
            // now you can work with backData as an object
            var count = backData.length;
            $("#details").append("<div>You have " + count + " results.</div>");
            for (var i = 0; i < count; i++) {
                $("#details").append("<div>" + backData[i] + "</div>"
            }
        }
    });
});
<script>

另请注意,您的 JavaScript 代码中缺少结束 }) 对。

【讨论】:

  • 哦,好吧!这是解决我的问题的一个非常聪明的方法!我还没有深入研究 JSON,但我真的必须尽快学习它!谢谢!
【解决方案2】:

我通过在 echo 中添加一个带有 class 属性的 div 来解决这个问题,以包含此订单详细信息,然后返回到我的 html,我使用 jQuery 来计算具有该特定类的 div 并获取数字。我从这里得到提示:count div elements with the same id JQUERY 但是非常欢迎您为此发布更好的解决方案:D

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2012-10-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多