我正在尝试为用户发布的不同图片创建一个类似的按钮。这是我的HTML:
<a href="#" title="like" class="likes" id="<?php echo $row['id']?>">Like</a>
这是我的javascript:
<script>
$(function(){
$(".likes").click(function(){
var postid = $(this).attr("id");
alert(postid);
$.ajax({
type:'POST',
url:'likes.php',
data:'id='+postid,
success:function(data){
alert("success");
}
});
});
});
</script>
这是likes.php,出于测试目的,它非常简单:
<?php
require('config.php');
$postid=$_POST['id'];
echo $postid;
?>
当我点击相似按钮时,一个小窗口将正确地定位,然后“成功”,这表示ajax成功,但是,当我打开likes.php时,我收到一条错误消息:通知:未定义index:第3行的C:\ XAMPP \ htdocs \ likes.php中的id
我尝试添加e.preventDefault()。我尝试了不同的语法,例如数据:'id ='+ postid,data:{id:postid},data:{'id':postid}等。我基本上尝试了单引号和双引号的所有组合。我还尝试添加数据类型:html和datatype:text。每当我得到一个说“成功”的警报时,但是当我打开likes.php时,$ _POST ['id']总是未定义的。
有人可以帮助我,这个错误花了我很多时间。
更新:我发现即使我输入了一个完全不存在的网址,比如网址:“aabbll.php”,点击“喜欢”按钮后,我仍然会看到一个警告“成功”的窗口,为什么尽管AJAX流程显然不成功,但页面是否仍然提醒“成功”?
答案 0 :(得分:3)
在新浏览器窗口中打开like.php时,您不会发送帖子变量“id”。
显示错误“Notice:Undefined index”,因为$ _POST数组不包含id字段。
您可以使用名为postman的chrome扩展来测试带有post变量的端点。
改进代码的技巧可能是将其包装在if isset语句中
if(isset($_POST['id'])){
// this code will only be executed if the post variable is sent to the page
$postid=$_POST['id'];
// update database
echo "Success";
}else{
echo "ERROR: No id post variable found";
}
您的javascript代码正在发送帖子变量
答案 1 :(得分:0)
尝试让var_dump($_POST)
看看你真正发布的内容。
答案 2 :(得分:0)
一些建议。
你的JS可以简单地
<script>
$(function() {
$('.likes').on('click', function() {
var postid = $(this).attr('id');
$.post("likes.php", {id: postid}).done(function( data ) {
alert( 'Data Loaded: ' + data );
});
});
});
对于你的PHP
<?php
if (!isset($_POST['id'])) {
/// Do what you want to do in this case.
}
$id = $_POST['id'];
// If using PHP7
$id = $_POST['id'] ?? null;
尽管$('.likes')
有效,但请尝试避免这种情况,因为在大多数情况下它是最慢的选择器。