Javascript 不获取任何数据
我有一个ajax请求,我试图找到一些标记并将其添加到搜索结果中 当我尝试使用php脚本查找某个内容时,问题就出现了,但它什么也找不到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"/>
<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接受了答案。很高兴看到事情解决了。