0

我正在通过 enterPerson() 为输入标签动态添加 html,然后调用 onkeyup=changeOnType(this) 在 autoInvit.php 中回显 $results 时应该显示自动完成,但是为什么我的自动完成代码不起作用,如果我提醒它,事实数据会显示. 有人可以帮我吗?先感谢您 :)

jquery 和自动完成的头文件:

<link rel="stylesheet" href="//code.jquery.com/ui/1.10.0/themes/base/jquery-ui.css" />  
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script src="//code.jquery.com/jquery-1.8.3.js"></script>
<script src="//code.jquery.com/ui/1.10.0/jquery-ui.js"></script>

“main.php”中的自动完成:

<script>    
function changeOnType(x){

    $.post(
    "autoInvit.php",
    {
         vals: $(x).val()
    },
    function(data){

    $("#"+x.id).autocomplete( {source:"autoInvit.php" }  );

    //alert(data);  
    }
    );

}
</script>

这是“invities.php”中动态 html 的 php 代码:

<?php 

echo '<input class="e" type="email" id="email"  onkeyup="changeOnType(this)"  autocomplete="on" role="textbox" aria-autocomplete="list" aria-haspopup="true"  />';
?>

这是我的 php 文件“autoInvit.php”,它呼应了结果:

 <?php

    include("includes/connection.php"); 

    $value = strip_tags($_POST['vals']);

    $req = "SELECT email as name "
        ."FROM members "
        ."WHERE email LIKE '".$value."%' "; 


    $query = mysql_query($req);

    while($row = mysql_fetch_array($query))
    {
        $results[] = $row['name'];
    }


    echo json_encode($results);

    ?>

请帮忙

4

1 回答 1

0

没有必要提出post请求。编辑:无需调用单独的函数或将侦听器附加到输入,只需注册自动完成插件即可。一旦 DOM 准备就绪,就需要调用它,因此您需要将它包装在一个 ready 函数中。这应该是您需要的所有 javascript:

$(function() {
    $("#"+x.id).autocomplete( {source:"autoInvit.php" }  );
});

用户输入的内容将与请求一起作为参数传递term

来自自动完成的 jQuery 文档:

字符串:使用字符串时,自动完成插件期望该字符串指向将返回 JSON 数据的 URL 资源。它可以在同一台主机上,也可以在不同的主机上(必须提供 JSONP)。自动完成插件不过滤结果,而是添加了一个带有术语字段的查询字符串,服务器端脚本应该使用它来过滤结果。例如,如果源选项设置为“ http://example.com ”并且用户键入 foo,则会向http://example.com?term=foo发出 GET 请求。数据本身可以采用与上述本地数据相同的格式。

此外,在将内容从用户直接传递到数据库时要小心。您可以打开自己的SQL 注入

于 2013-04-17T18:39:45.647 回答