2016-08-19 132 views
2

我一直在研究Like和不同功能与jQuery,ajax和PHP。我的问题有点难以理解。让我们先试着理解它。 Jquery Post无法正常工作?


我有2个PHP页面, viewProfile.phpLikeMail.phpLikeMail.php正在通过 viewProfile.php中的ajax函数调用。

这里是viewProfile.php页的说明部分

       ----------------- 
          | Like/Unlike | 
          ----------------- 

这里是按钮,它实际上是由这个AJAX功能

function like() 
{ 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 

    { 
     if(req.readyState==4 && req.status==200) 
     { 
      document.getElementById('Like').innerHTML=req.responseText; 

     } 
    } 
    req.open('POST','LikeMail.php','true'); 
    req.send(); 
} 
setInterval(function(){like()},1000); 

HTML来自LikeMail.php

<div id="Like"></div> 

输出在此处显示在此div中。 上面的按钮可能是LikeUnlike取决于LikeMail.php中的条件,这将在以下LikeMail.php说明部分中进行描述。

当他们中的一个(按钮)LikeUnlike被点击时。然后它调用各自的jquery点击功能,发送post请求到LikeMail.php。我已经提到Indirect页面的标题,因为LikeUnlike按钮实际上存在于LikeMail.php页面。但由于ajax调用这些按钮正在显示在viewProfile.php页面。所以,我再通过viewProfile.php发送POST请求到实际的页面LikeMail.php

这是jQuery的职位Unlike按钮

$(document).ready(function(){ 

    $('#Unlike').unbind().click(function(){ 
     $.post("LikeMail.php", 
      {Unlike: this.id}, 
      function(data){ 
       $('#response').html(data); 
      } 

     ); 

    }); 

}); 

这是jQuery的岗位或Like按钮

$(document).ready(function(){ 

    $('#Like').unbind().click(function(){ 
     $.post("LikeMail.php", 
      {Like: this.id}, 
     function(data){ 
      $('#response').html(data); 
     } 
     ); 

    }); 

}); 


描述的结束部分viewProfile.php页面



这里是LikeMail.php页的描述

LikeUnlike按钮被 viewProfile.php页所示的截面取决于此代码:

$check_for_likes = mysqli_query($conn, "SELECT * FROM liked WHERE user1='$user1' AND user2='$user2'"); 
       $numrows_likes = mysqli_num_rows($check_for_likes); 
       if (false == $numrows_likes) { 
        echo mysqli_error($conn); 
       } 

       if ($numrows_likes >= 1) { 
        echo '<input type="submit" name="Unlike" value="Unlike" id="Unlike" class="btn btn-lg btn-info edit">'; 


       } 

       elseif ($numrows_likes == 0) { 
        echo '<input type="submit" name="Like" value="Like" id="Like" class="btn btn-lg btn-info edit">'; 
       } 

按钮取决于上述这两个条件。

现在,当点击Like按钮,从viewProfile.php post请求来这里

if(isset($_POST['Like'])) //When Like button in viewProfile.php is clicked then this peace of code inside if condition should run and insert some record in database 
      { 
       $total_likes = $total_likes+1; 
       $like = mysqli_query($conn, "UPDATE user SET user_Likes = '$total_likes' WHERE user_id = '$user2'"); 
       $user_likes = mysqli_query($conn, "INSERT INTO liked (user1,user2) VALUES ('$user1','$user2')"); 
       $query3 = "INSERT INTO notification (user1, user2, alert, notificationType) VALUE ('$user1','$user2','unchecked','like')"; 
       if (mysqli_query($conn, $query3)) { 
        echo "Like"; 
       } else { 
        echo mysqli_error($conn); 
       } 

      } 

同样,当点击Unlike按钮。代码的和平应该运行。

if(isset($_POST['Unlike'])) //This is the condition for Unlike button. It should delete record from databse 
      { 
       $total_likes = $total_likes-2; 
       $like = mysqli_query($conn, "UPDATE user SET user_Likes='$total_likes' WHERE user_id='$user2'"); 
       $remove_user = mysqli_query($conn, "DELETE FROM liked WHERE user1='$user1' AND user2='$user2'"); 
       $query3 = "DELETE FROM notification WHERE user1='$user1' AND user2='$user2' AND notificationType='like'"; 

       $check = mysqli_query($conn, $query3); 
       if ($check) { 
        echo "Unlike"; 
       } else { 
        echo mysqli_error($conn); 
       } 
      } 


问题:
我所面临的主要问题是,当我点击LikeUnlike二者执行的Like按钮的代码的条件。两者都将数据插入数据库中作为Unlike条件应该从数据库中删除数据,但它也会按照Like按钮的条件插入数据。请你帮我解决这个问题。提前致谢!

更新:
当我删除Like按钮的所有代码。 Unlike按钮的条件开始正常工作。

+0

总结到人们可以轻松地集中主要问题 – kollein

+0

@kollein综述后'Problem'标题 –

+0

需要跟踪您的变量来描述检查它们是否损坏,或者最终状况是否有误。在PHP端使用和滥用'print_r()'和'error_log()',在javascript上使用'alert()'或'console.log()'。 – technico

回答

1

我觉得有一个重复的ID在某处,也许是DIV。看看这个。

<div id="Like_2"></div> 

<input type="submit" name="Unlike" value="Unlike" id="Unlike" class="btn btn-lg btn-info edit"> 

<input type="submit" name="Like" value="Like" id="Like" class="btn btn-lg btn-info edit"> 

<div id="response"></div> 


$(document).ready(function(){ 
    $(document).on('click','#Unlike', function(){ 
     $('#response').html(this.id); 
     //ajax call 

    }); 
    $(document).on('click','#Like', function(){ 
     $('#response').html(this.id); 
     //ajax call 

    }); 
}); 

以及JavaScript函数:

function like() 
{ 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 

    { 
     if(req.readyState==4 && req.status==200) 
     { 
      document.getElementById('Like_2').innerHTML=req.responseText; 

     } 
    } 
    req.open('POST','LikeMail.php','true'); 
    req.send(); 
} 
setInterval(function(){like()},1000); 

https://jsfiddle.net/wx38rz5L/2103/

+0

当我通过'viewProfile.php'页面发送请求时会出现问题吗? –

+0

不确定,您将不得不使用F12来打开开发人员工具,以查看您要发送到后端的是什么。但是从你描述的内容看来,它似乎是一个重复的ID。 – Dimitri

+0

首先它工作。但现在这两个按钮停止工作,控制台是空的 –