使用jquery ajax和php时真的很奇怪

时间:2017-05-03 22:27:19

标签: javascript php jquery ajax

我正在尝试为用户发布的不同图片创建一个类似的按钮。这是我的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流程显然不成功,但页面是否仍然提醒“成功”?

3 个答案:

答案 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')有效,但请尝试避免这种情况,因为在大多数情况下它是最慢的选择器。