【问题标题】:Autocomplete doesn't work anymore自动完成不再起作用
【发布时间】:2025-12-22 20:20:15
【问题描述】:

几天后我和老师一起做了一个自动完成输入!

现在我再次尝试测试它,但它突然不再工作了!

我的老师现在要离开一段时间了,所以我必须一个人尝试。
但我只是不知道如何解决这个问题。(是的,我真的试过了。)
它确实给出了$_GET。(所以这不是问题)

jQuery:

var element = '';
function split( val ) {
 return val.split( /,\s*/ );
}
function extractLast( term ) {
 return split( term ).pop();
}
function getSearchlocation( ) {
 return $(element).data('searchlocation');
}

$( ".tag" ).bind( "keydown", function( event ) {
 if ( event.keyCode === $.ui.keyCode.TAB &&
     $( this ).autocomplete( "instance" ).menu.active ) {
     event.preventDefault();
 }
})
.autocomplete({
 source: function( request, response ) {
     $.getJSON( 'checklistHandler.php', {
         term: extractLast( request.term ),
         searchlocation: getSearchlocation(  )
     }, response );
 },
 search: function() {
     var term = extractLast( this.value );
     element = this;
     if ( term.length < 2 ) {
         return false;
     }
 },
 focus: function() {
     return false;
     },
 select: function( event, ui ) {
     var terms = split( this.value );
     terms.pop();
     terms.push( ui.item.value );
     terms.push( "" );
     this.value = terms.join( ", " );
     return false;
 }
});

处理程序:

if ($_GET['term']) {
    if($_GET['searchlocation']=='cursus')
    {
        $table = 'flexibel';
        $column = 'app';
    }
    elseif($_GET['searchlocation']=='boek')
    {
        $table = 'boeken';
        $column = 'naam';
    }
    else
    {
        exit;
    }

$search = $_GET['term'];

$query = mysql_query("SELECT ".$column." FROM ".$table." WHERE ".$column." LIKE '%".$search."%'");
$result = array();

$i=0;
while($r = mysql_fetch_assoc($query))
{
    $result[] = array('id'=>$i, 'label'=>$r[$column], 'value'=>$r[$column]);
    $i++;
}

echo json_encode($result);

}

输入:

if ($onderdeel['formInputType'] == 'autocomplete')
{
    ?>
    <tr>
        <input type="hidden" name="buildingblock[<?=$onderdeel['formBuildingBlockId']?>][formBuildingBlockId]" value="<?=$onderdeel['formBuildingBlockId']?>">
        <td class="<?= $class ?>" width="320" style="vertical-align: middle;"><?= $onderdeel['formInputLabel'] ?><?=($onderdeel['formRequired'] == 'on' ? '<img title="Verplicht Veld" alt="Verplicht Veld" style="position: relative; top: -10px; height: 5px; width: 5px;" src="'.IMG.'/asterisk_orange.png">' : '')?></td>
        <td class="<?= $class ?>" width="320"><textarea style="min-width: 212px; max-width: 212px;" class="tag" data-searchlocation="<?=$onderdeel['formInputOptions']?>" name="buildingblock[<?=$onderdeel['formBuildingBlockId']?>][content]" <?=($onderdeel['formRequired'] == 'on' ? 'required' : '')?>><?=$onderdeel['formContent']?></textarea></td>
        <td class="<?= $class ?>" width="60" style="vertical-align: middle; text-align: center;"><input type="checkbox" name="buildingblock[<?=$onderdeel['formBuildingBlockId']?>][checked]" value="1"<?= ($onderdeel['formContentChecked'] == 1 ? ' checked="checked"' : '') ?> /></td>
        <td class="<?= $class ?>" width="60" style="vertical-align: middle; text-align: center;"><a href="checklistHandler.php?delete_vraag=<?=$test?>"></a></td>
    </tr>
<?
}

请求的响应是:
[{"id":0,"label":"Excel Basis","value":"Excel Basis"},{"id":1,"label":"Excel Essentials","value":"Excel Essentials"},{"id":2,"label":"Excel Gevorderd","value":"Excel Gevorderd"},{"id":3,"label":"Excel: Analyse en Rapportage","value":"Excel: Analyse en Rapportage"},{"id":4,"label":"Excel: Draaitabellen en Grafieken","value":"Excel: Draaitabellen en Grafieken"},{"id":5,"label":"Excel: Functies en Formules","value":"Excel: Functies en Formules"},{"id":6,"label":"Excel: Koppelingen en Macro\u2019s ","value":"Excel: Koppelingen en Macro\u2019s "},{"id":7,"label":"Flexibele cursussen","value":"Flexibele cursussen"},{"id":8,"label":"Word: Complexe Documenten","value":"Word: Complexe Documenten"}]

我希望你能帮助我解决问题。

你好,

马修。

【问题讨论】:

  • 您的浏览器开发者控制台以及页面本身出现了哪些错误?
  • 没有问题。它说一切顺利!
  • 那么什么不起作用,请指定。您希望发生的事情没有发生。
  • 当你输入 3 个字母,如 Exc 时,需要列出我从数据库中获取的项目列表并将其放入列表中!
  • 看起来容易受到 sql 注入的影响,也请查看 prepared statements

标签: php jquery ajax json autocomplete


【解决方案1】:

问题已解决!

问题是……

我从数据库中询问了错误的数据!

$onderdeel['formInputOption']$onderdeel['formInputName']

抱歉!

【讨论】:

  • 干得好,下次你会知道如何系统地调试你的程序。
【解决方案2】:

您的 while 循环似乎有问题。

应该是这样的:

$i=0;
while($r = mysql_fetch_assoc($query))
{
    $result[] = array(
                        'id'=>$i,
                        'label'=>$r['label'],
                        'value'=>$r['value']
                     );
    $i++;
}

【讨论】:

  • Aardig van je dat je dat er nog eff bij zet。 Maar hoe ik het heb is namelijk op mijn manier, en dan begrijp ik het ook。 en verander het liever niet! :)
  • Prima, ik zat alleen naar je while loop te kijken en zag dat het daar mischien ook mis gaat.