2016-08-19 126 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

首先它工作。但現在這兩個按鈕停止工作,控制檯是空的 –