自动提供Javascript / PHP / AJAX代码

时间:2013-10-25 10:02:01

标签: javascript php jquery autocomplete autosuggest

考虑一个包含一些值的数组

array = {'microsoft','micromax', 'miniclip','michael jackson','million','milky way'}

当用户开始输入文字时,请说他/她正试图输入million。当用户开始输入'mi'时,数组中的上述建议将显示给用户。

我的问题:

让我们假设用户正在键入“迷你剪辑”这个词,通过拼写错误/他开始输入'mni' or 'minc' or 'nim' or 'imn' or 'nim' instead of 'min',这个场景也需要向用户显示建议。不管怎么说,那些打字的字符可以在'miniclip'这个词中找到。 Typo对于所有入门级用户/普通用户来说都很常见。所以我需要javascript / php / ajax / opensource库中的代码来适应这种情况。

2 个答案:

答案 0 :(得分:4)

HTML

<form action=""><input type="text" name="word" id="word"></form>
<div id="auto"></div>

JS

$(function(){
    $('#word').keyup(function(e){
        var input = $(this).val();
        $.ajax({
            type: "get",
            url: "autocomplete.php",
            data: {word: input},
            async: true,
            success: function(data){
                var outWords = $.parseJSON(data);
                $('#auto').html('');

                for(x = 0; x < outWords.length; x++){
                    $('#auto').prepend('<div>'+outWords[x]+'</div>'); //Fills the #auto div with the options
                }
            }
        })
    })
});

不要忘记链接jQuery ...

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

N.B。

您需要执行一些操作,例如向onclick的{​​{1}}个div添加#auto事件,以替换#word(输入字段)的内容。< / p>

PHP

$array  = array('microsoft','micromax', 'miniclip','michael jackson','million','milky way');
$input  = urldecode($_GET['word']); //Get input word/phrase (decode in case of spaces etc.)
$length = strlen($input);           //Get length of input word
// $min    = $length - 1;              //Length of word - 1
// $max    = $length + 1;              //Length of word + 1

$returned = preg_grep('/^(['.$input.']{'.$length.'}.*)$/i', $array); //Find matches in $array and return as array
$returned = array_values($returned);                                //Re-index from 0

echo json_encode($returned); //Returm json string to ajax call

正则表达式

/^([$input]{$length}.*)$/i
  1. / =&gt;开始分隔
  2. ^ =&gt;字符串开头
  3. ( =&gt;启动捕获组
  4. [ =&gt;开始一个角色类
  5. $input =&gt;将输入词添加到角色类
  6. ] =&gt;结束角色类(4)
  7. {$length} =&gt;设置字符串的长度以匹配字符类(输入字的长度)
  8. .* =&gt;匹配任何以下字符0次或以上
  9. ) =&gt;结束捕获组(3)
  10. $ =&gt;匹配字符串结尾
  11. / =&gt;结束分隔符
  12. i =&gt;不区分大小写的修饰符
  13. 最小/最大

    我已添加评论的$min$max变量...我认为您可能的附加功能...您将通过更改来实现它们:< / p>

    {'.$length.'}          <-- Change this
    {'.$min.','.$max.'}    <--To that
    {'.$length.','.$max.'} <-- Or that (or another combination)
    

    实施例

    一个例子可能最能说明这是如何运作的......

    假设一个自动正确的数组:

    $array = array('loser', 'loses', 'losing');
    

    和输入:

    lose
    

    目前({'.$length.'})代码将返回:

    loser
    loses
    

    但如果您将其更改为{'.$min.','.$max.'}(并取消注释$min / $max);它将返回:

    losing
    loser
    loses
    

答案 1 :(得分:0)

试试这个

这是index.php

<html>
    <body>
        <input type="text" name="testid" id="testid" >
        <div id="result">

        </div>
    </body>
    <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
    <script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
    $(document).ready(function(){
        var xhr = null;

        $('#testid').on("keyup", function(){
            if(xhr !== null) { 
                xhr.abort();
            }
            var searchkey = $(this).val();

           xhr = $.ajax({
            method: "POST",
            url: "ajax_request.php",
            data: { searchkey: searchkey }
          })
            .done(function( msg ) {
                $('#result').html(msg);
            });
        });

        $(document.body).on('click', ".listitem", function(e){
            var values = $(this).html();
            $('#testid').val(values);
            $('#result').html('');
            return false;
        });

    });
</script>
</html>

这个是你的ajax_request.php

<?php
$arr = array("Shailesh Sonare", "Hello World", "Hello Universe");

$html = "<ul>";

foreach ($arr as $key => $value) {
    $html .= "<li class='listitem'>" . $value . "</li>";
}

$html .= "</ul>";

echo $html;