Javascript 不获取任何数据

Javascript 不获取任何数据,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我有一个ajax请求,我试图找到一些标记并将其添加到搜索结果中 当我尝试使用php脚本查找某个内容时,问题就出现了,但它什么也找不到 <div> <form action="search()" method="post"> <label for="tagsearch">Search tags: </label> <input type="text" id="tagSearch" name="tagsearch"/>

我有一个ajax请求,我试图找到一些标记并将其添加到搜索结果中

当我尝试使用php脚本查找某个内容时,问题就出现了,但它什么也找不到

<div>
<form action="search()" method="post">
    <label for="tagsearch">Search tags: </label>
    <input type="text" id="tagSearch" name="tagsearch"/>
    <input type="button" id="tagenter" value="Add tag"/>
</div>
<div id="tagHolder">
    <!--Tags here-->
</div>
</div>
<script type="text/javascript">
    $(document).ready(function(){
        function search(){
            var tag=$("tagSearch").val();

            if(tag!=""){
                $("#tagHolder").html();
                $.ajax({
                   type:"post",
                    url:"gettag.php",
                    data:"tag="+encodeURIComponent(tag),
                    success:function(data){
                        $("#tagHolder").html(data);
                        $("#tagSearch").val("");
                    }
                });
            }
        }

        $("#tagenter").click(function(){
            search();
        });

        $('#tagSearch').keyup(function(e){
            if(e.keyCode == 13){
                search();
            }
        });
    });
</script>
上面的代码是ajax请求

这是php脚本

//Connect to database
$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

//Check if connection is up
if(mysqli_connect_errno()){
    echo "Couldn't connect". mysqli_connect_error($con);
}

$tag = $_POST["tag"];

$result=mysqli_query($con, "SELECT * FROM tags WHERE tag = '".$tag."'");
$found=mysqli_num_rows($result);

if($found>0){
    while($row=mysqli_fetch_array($result)){
        echo "<div>". $row['tag'] . "</div>";
    }
}else{
    echo "<div>No suggestions</div>";
}

mysqli_close($con);
我没有得到任何建议作为搜索结果。我猜SQL查询是错误的,或者$found变量是错误的。

var tag=$tagSearch.val; try var tag=$tagSearch.val; 如果要选择哪个id是tagSearch,请使用$tagSearch jquery中有更多关于选择器的内容
这里有几个重要的问题

作为Jeff,您没有正确地从tagSearch获取值,因为$tagSearch查找的是标记名为tagSearch的元素,而不是id为tagSearch的元素。要使用id,请将添加到选择器:var tag=$tagSearch.val;这是您描述的问题的主要原因,但请继续阅读,还有很多事情要做

您很容易受到SQL注入攻击:

了解更多关于它们的信息,以及如何抵御它们

在ajax调用中,data:tag=+tag是错误的。它应该是data:{tag:tag}首选项或data:tag=+encodeURIComponenttag。对于您的原始代码,如果标记包含任何在URL中的URI编码中不直接有效的字符,您的PHP页面将无法完全接收您发送的内容。在我的第一个示例中使用对象时,jQuery将为您处理编码;否则,请使用encodeURIComponent自己进行编码

正如有帮助地指出的那样,表单操作是错误的,当用户在文本字段中按Enter键时,一些浏览器会尝试使用它。它应该是action=javascript:search,而不仅仅是action=search。后者将被视为URL

正如前面所指出的,您可能希望用上方的

错误检查

您也没有检查代码中的任何错误,例如和


这些是开发过程中应该使用的重要工具。

让我们看看您的HTML表单。我在你发布的代码中没有看到标签$_POST[tag]取自POST表单方法。这可能不是问题所在,但data:tag=+tag是错误的。它应该是data:{tag:tag}首选或data:tag=+encodeURIComponenttag。@Fred ii-:非常正确。不过,单击tagEnter会起作用。但是,是的,如果浏览器在文本字段中按Enter键时提交表单(如果该文本字段是唯一的字段),则在该字段中按Enter键不会产生预期效果。:-缺少的标记可能无关紧要。@Fred ii-:$tagSearch查找的是id,而不是名称。id的大写字母为S。@Fred ii-:我们没有发布表单,因此与表单无关。data:{tag:tag}所做的是向ajax传递一个名为tag的属性的对象,该属性的值取自tag变量。也许更清楚一点:var foo=bar;$。ajax{url:/page,类型:post,数据:{prop:foo};将道具传递到带有值栏的页面:echo$\u POST['prop']将显示栏。这可能是正确的。为了让它成为一个好的答案,说为什么,而不仅仅是什么。啊,OP接受了答案。很高兴看到事情解决了。