AJAX搜索不适用于空格

时间:2016-01-05 12:09:47

标签: php database

当用户在实时Ajax搜索中输入空格时,我遇到了问题,它没有显示任何结果。当用户只键入一半没有空格的单词时,它可以正常工作。我认为它与Ajax有关,但在这里找不到任何解决方案..也许你可以提出建议......谢谢。

的Ajax:

function ajaxFunction(str)
        {
            var httpxml;
            try
            {
                // Firefox, Opera 8.0+, Safari
                httpxml = new XMLHttpRequest();
            }
            catch (e)
            {
                // Internet Explorer
                try
                {
                    httpxml = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e)
                {
                    try
                    {
                        httpxml = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e)
                    {
                        alert("Your browser does not support AJAX!");
                        return false;
                    }
                }
            }
            function stateChanged()
            {
                if (httpxml.readyState == 4)
                {
                    document.getElementById("displayDiv").innerHTML = httpxml.responseText;
                    document.getElementById("msg").style.display = 'none';

                }
            }
            var url = "search-ajax.php";
            url = url + "?txt=" + str;
            url = url + "&sid=" + Math.random();
            httpxml.onreadystatechange = stateChanged;
            httpxml.open("GET", url, true);
            httpxml.send(null);
            document.getElementById("msg").innerHTML = "Please Wait ...";
            document.getElementById("msg").style.display = 'inline';

        }

搜索ajax.php:

    error_reporting(0);

require "search_con.php";


$in = $_GET['txt'];
if (!ctype_alnum($in)) {
    echo "";
    exit;
}
$msg = "";
$msg = "<div id=results style=position:absolute;z-index: 10;right:0px;background-color:#302b2b;>";
if (strlen($in) > 0 and strlen($in) < 20) {
    $sql = "SELECT * FROM products WHERE name LIKE '%$in%' LIMIT 17";
    foreach ($dbo->query($sql) as $nt) {

        $name = $nt['name'];

        $msg .='<div>' . $name . '<div>';
    }
}
$msg .='</div>';
echo $msg;

它可能是什么?感谢您的所有建议:)

3 个答案:

答案 0 :(得分:0)

您必须删除PHP脚本中txt的前导和尾随空格:

$in = trim($_GET['txt']);

答案 1 :(得分:0)

如果文本包含空格,函数ctype_alnum将返回false。那么也许你的脚本停在那里?

$in = $_GET['txt'];

//always occurs when a space is in the $in variable.
if (!ctype_alnum($in)) 
{
    echo "";
    exit;
}

确保在进行检查之前使用trim()。该检查还将停止搜索文本中的文本,如文本中的空格,如“新年”。

答案 2 :(得分:0)

解决了,我意识到我不需要这段代码。

if (!ctype_alnum($in)) {
echo "";
exit;

}