【问题标题】:jQuery Autocomplete doesn't load more than 250 MySQL records?jQuery Autocomplete 不会加载超过 250 条 MySQL 记录?
【发布时间】:2016-05-25 04:04:02
【问题描述】:

我有一种产品形式,其中产品名称字段具有自动完成功能,但它加载的记录不超过 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[]">

【问题讨论】:

  • If I put the limit to 300 or 500 then it doesn't work,你能解释一下doesn't work吗?没有结果、错误等。
  • @chris85 如果我从查询中删除限制或将诸如 300 或 350 之类的东西限制在限制中,那么它不会在我的自动完成中加载任何内容。
  • 它是否抛出错误,您在检查错误吗?
  • 我很惊讶它完全有效,?&gt; "&lt;?php echo $prod_name; ?&gt;", &lt;?php?
  • @chris85 我正在尝试找到一种回显查询的方法,但不知道,因为我是 php 的初学者。我用"&lt;?php echo $query_product; ?&gt;"替换"&lt;?php echo $prod_name; ?&gt;",但它只是在项目字段中回显查询250次

标签: php jquery mysql autocomplete fetch


【解决方案1】:

您的$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']))."',";
    }
    ?>
];

【讨论】:

  • 我不认为在 php 中手动生成 javascript 数组是个好主意 :-)
  • 它现在正在工作,我认为某些产品名称中有双引号或单引号,这就是它产生问题的原因。我们如何跳过 &amp; 符号,因为某些产品的名称中有 &amp; 并且代码不处理它。
【解决方案2】:
"SELECT DISTINCT prod_name FROM tbl_product LIMIT 250";

尝试删除 LIMIT 250 部分?

【讨论】:

  • 如果我删除 LIMIT 或将 LIMIT 设置为大于 250,则自动完成功能根本不起作用。然后它不会加载任何东西。
  • OP 状态尝试使用更高的值,If I put the limit to 300 or 500 then it doesn't work
【解决方案3】:

这只是一个猜测,因为没有足够的信息继续下去,但这看起来非常错误:

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

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

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

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

【讨论】:

  • 我会说这将是万无一失的选择。 var availableTags = $.parseJSON('&lt;?php echo json_encode($your_array); ?&gt;'); ;-)
  • @MonkeyZeus 不,当您 echo json_encode(...) 时,您已经有一个 javascript 对象或数组。您不能将其解析为 json,因为它不是字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多