Javascript 使用jQueryAjax和php时出现了非常奇怪的错误

Javascript 使用jQueryAjax和php时出现了非常奇怪的错误,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我正在尝试为用户发布的不同图像创建一个like按钮。这是我的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");

我正在尝试为用户发布的不同图像创建一个like按钮。这是我的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”)。单击(函数(){
var postid=$(this.attr(“id”);
警报(postid);
$.ajax({
类型:'POST',
url:'likes.php',
数据:'id='+posted,
成功:功能(数据){
警惕(“成功”);
}
});
});
});
这是likes.php,出于测试目的,它非常简单:

<?php
require('config.php');
$postid=$_POST['id'];
echo $postid;
?>

当我单击like按钮时,一个小窗口将正确显示,然后显示“success”,这表示ajax成功,但是,当我打开likes.php时,我在第3行的C:\XAMPP\htdocs\likes.php中得到一个错误:注意:未定义的索引:id

我尝试添加e.preventDefault()。我尝试了不同的语法,比如data:'id='+postid,data:{id:postid},data:{'id':postid},等等。我基本上尝试了单引号和双引号的所有组合。我还尝试添加datatype:html和datatype:text。每次我刚收到一个提示,上面写着“success”,但当我打开likes.php时,$\u POST['id']总是未定义

有人能帮我吗?这只虫子花了我很多时间


更新:我发现即使我输入了一个完全不存在的url,比如url:“aabbll.php”,在我点击“喜欢”按钮后,我仍然会看到一个提示“成功”的窗口,为什么页面会一直提示“成功”,尽管AJAX过程显然没有成功

在新的浏览器窗口中打开like.php时,您没有发送post变量“id”

显示错误“注意:未定义索引”,因为$\u 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代码正在发送post变量

在新的浏览器窗口中打开like.php时,您没有发送post变量“id”

显示错误“注意:未定义索引”,因为$\u 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代码正在发送post变量

请尝试放置
var\u dump($\u post)
,以查看您真正发布的内容

尝试放置
var\u dump($\u POST)
以查看您真正发布的内容

几点建议

您的JS可以简单地

<script>
$(function() {

    $('.likes').on('click', function() {

        var postid = $(this).attr('id'); 
        $.post("likes.php", {id: postid}).done(function( data ) {

            alert( 'Data Loaded: ' + data );
        });
    });
});

$(函数(){
$('.likes')。在('click',function()上{
var postid=$(this.attr('id');
$.post(“likes.php”,{id:postid}).done(函数(数据){
警报(“数据加载:”+数据);
});
});
});

为您的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;
几点建议

您的JS可以简单地

<script>
$(function() {

    $('.likes').on('click', function() {

        var postid = $(this).attr('id'); 
        $.post("likes.php", {id: postid}).done(function( data ) {

            alert( 'Data Loaded: ' + data );
        });
    });
});

$(函数(){
$('.likes')。在('click',function()上{
var postid=$(this.attr('id');
$.post(“likes.php”,{id:postid}).done(函数(数据){
警报(“数据加载:”+数据);
});
});
});

为您的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;

打开是指在web浏览器中输入本地文件的url?是的,在我的LocalHost中打开是指在web浏览器中输入本地文件的url?是的,在我的LocalHost中打开如果我输入if(isset($\u POST['id'])并打开likes.php,无论我在isset语句中输入了什么代码,我都只会得到一个空页面。我想这是因为$\u POST是空的,但我的ajax代码似乎是正确的,我能做些什么来解决这个问题吗?我已经更新了我的答案,以便给用户一个更好的响应。如果我输入if(isset($\u POST['id']),并打开likes.php,不管我在isset语句中输入了什么代码,我都会得到一个空页面。我想这是因为$\u POST是空的,但是我的ajax代码似乎是正确的,我能做些什么来解决这个问题吗?我已经更新了我的答案,以便给用户一个更好的响应它是var\u dump而不是vardumpYup。我错了,这是var_dump不是var dump是的。我的错误。