jQuery 自动完成不会加载超过 250 MySQL 条记录?

jQuery Autocomplete doesn't load more than 250 MySQL records?

我有一种产品形式,其中产品名称字段具有自动完成功能,但它加载的记录不超过 250 条。如果我将限制设置为 300 或 500,则它不起作用。以下是我的代码,谁能告诉我我的脚本是否有任何问题。

           jQuery.noConflict();
            jQuery(function() {
                var availableTags = [
                    <?php
                    $query_product = "SELECT DISTINCT prod_name FROM tbl_product LIMIT 250";
                    $result_product = mysql_query($query_product);
                    while($row_product = mysql_fetch_array($result_product))
                    {
                    $prod_name = $row_product['prod_name'];
                    ?>
                    "<?php echo $prod_name; ?>",
                    <?php
                    }
                    ?>
                ];
                jQuery('input[name="item[]"]').autocomplete({
                    source: availableTags
                });
            });



<input type="text" placeholder="Item" id="item" name="item[]">
"SELECT DISTINCT prod_name FROM tbl_product LIMIT 250";

尝试删除 LIMIT 250 部分?

您的 $row_product['prod_name'] 中很可能有一个单引号或反斜杠,因此您的数据库数据在提供给 Javascript 之前需要清理。

我认为您的代码需要如下所示:

var availableTags = [
    <?php
    $query_product = "SELECT DISTINCT prod_name FROM tbl_product LIMIT 250";
    $result_product = mysql_query($query_product);
    while($row_product = mysql_fetch_array($result_product))
    {
        echo "'".str_replace("'", "\'", str_replace('\', '\\', $row_product['prod_name']))."',";
    }
    ?>
];

这只是一个猜测,因为没有足够的信息可以继续,但这看起来很不对:

var availableTags = [
    <?php
    ...
    ?>
    "<?php echo $prod_name; ?>",
    <?php
    ...
    ?>
    ];

看起来您正在尝试构建 json / javascript 数组,但您输出的可能不是您需要的,数据中的任何特殊字符都会破坏 json.所以我的猜测是在产品 250 左右有一个产品打破了你的结果。

你应该做的是构建一个数组并使用 json_encode() 将其直接发送到 javascript:

var availableTags = <?php echo json_encode($your_array); ?>;