2017-08-12 49 views
0

我在1個php文件中有2個函數,一個用於upvote,另一個用於downvote。如何告訴ajax發佈名稱爲upvoteImage()的函數?我從字面上開始與阿賈克斯,所以我有一些麻煩搞清楚事情。如果我在1個php文件中有2個函數,如何告訴ajax哪個函數發送POST?

JavaScript文件

$('.arrowUp').click(function(){ 
     var id = $("input[name='id']").val(); 
     var userId = $("input[name='userId']").val(); 
     $.post('../includes/voting.inc.php', {id: id, userId: userId}, function(data){ 
      alert(data); 
     }); 

    }); 

PHP文件

function upvoteImage($conn) { 
     if (isset($_POST['upvoteImage'])){ 

      $imageId = $_POST['id']; 
      $userId = $_POST['userId']; 

      $sql3 = "SELECT * FROM votingconnection WHERE userId='".$userId."' and imageId='".$imageId."'"; 
      $result3 = mysqli_query($conn, $sql3); 
      $getResult3 = mysqli_fetch_assoc($result3); 

      if ($getResult3['vote'] == 'downvote') { 

       $sql4 = "UPDATE votingconnection SET vote='upvote' WHERE userId='".$userId."' and imageId='".$imageId."'"; 
       $result4 = mysqli_query($conn, $sql4); 

       $sql5 = "UPDATE image SET upvotes = upvotes + 1 WHERE id='$imageId'"; 
       $result5 = mysqli_query($conn, $sql5); 

       $sql6 = "UPDATE image SET downvotes = downvotes - 1 WHERE id='$imageId'"; 
       $result6 = mysqli_query($conn, $sql6); 

       header("Location: ../index.php"); 

      } else { 

      $sql = "INSERT INTO votingconnection (userId, imageId, vote) VALUES ('".$userId."','".$imageId."', 'upvote')"; 
      $result = mysqli_query($conn, $sql); 

      $sql2 = "UPDATE image SET upvotes = upvotes + 1 WHERE id='$imageId'"; 
      $result2 = mysqli_query($conn, $sql2); 

      header("Location: ../index.php"); 

     } 

     } 
    } 

我只是不明白如何索引頁面,該頁面與給予好評/ downvote和JavaScript頁面邏輯連接。這是我的索引頁面的一部分。

<?php 

    if (isset($_POST['action']) && in_array($_POST['action'], ['upvote', 'downvote'])) { 
     if ($_POST['action'] == 'upvote') { 
      upvoteImage($conn); 
     } else { 
      downvoteImage($conn); 
     } 
    } 

    $currentUser = $_SESSION['id']; 

    $sql = "SELECT * FROM image"; 
    $result = mysqli_query($conn, $sql); 
    $getResult = mysqli_fetch_assoc($result); 

    $numberOfResults = mysqli_num_rows($result); 
    $resultsPerPage = 5; 
    $numberOfPages = ceil($numberOfResults/$resultsPerPage); 

    if (!isset($_GET['page'])) { 
     $page = 1; 
    } else { 
     $page = $_GET['page']; 
    } 

    $currentPageResults = ($page-1)*$resultsPerPage; 

    $sql2 = "SELECT * FROM image ORDER BY id DESC LIMIT ".$currentPageResults.','.$resultsPerPage; 
    $result2 = mysqli_query($conn, $sql2); 

    while($row = $result2->fetch_assoc()) { 

     $sql3 = "SELECT * FROM votingconnection WHERE userId='".$currentUser."' and imageId='".$row['id']."'"; 
     $result3 = mysqli_query($conn, $sql3); 
     $getResult3 = mysqli_fetch_assoc($result3); 
     $hasVoted = mysqli_num_rows($result3); 
     $vote = $getResult3['vote']; 

     echo "<div class='imageContainer'>" 
       ."<h1>".$row["name"].'</h1>' 
       .'<div class="stickyImageContainer"><a href="imageInfo.php?image='.$row["path"].'"><img class="uploadedImg" src="uploads/'.$row["path"] .'" alt="Random image" /></a> '; 
     if (isset($_SESSION['id'])) { 
     if ($hasVoted < 1) { 
      echo "<div class='upvoteDownvoteRatingContainer'><form class='upvoteImage' method='POST' action=''> 
         <input type='hidden' name='action' value='upvote'> 
         <input type='hidden' name='id' value='".$row['id']."'> 
         <input type='hidden' name='userId' value='".$currentUser."'> 
         <button class='upvoteImageButton' type='submit' name='upvoteImage'><img class='arrowUp' src='../images/Social Media/arrowUp.png' alt='submit'></button> 
        </form>"; 

      echo "<div class='ratingNumber'>"; 
       if ($row['upvotes'] - $row['downvotes'] <= 0) { 
        echo "<p>0</p>"; 
       } else { 
        echo $row['upvotes'] - $row['downvotes']; 
       } 

      echo "</div>"; 

      echo "<form class='downvoteImage' method='POST' action=''> 
         <input type='hidden' name='action' value='downvote'> 
         <input type='hidden' name='id' value='".$row['id']."'> 
         <input type='hidden' name='userId' value='".$currentUser."'> 
         <button class='downvoteImageButton' type='submit' name='downvoteImage'><img class='arrowDown' src='../images/Social Media/arrowDown.png' alt='submit'></button> 
        </form></div>"; 
     } 
+0

通常,我只是添加一個'action'參數給我的請求,其值與我想要執行的函數相對應。然後我使用該參數的'switch'語句來執行正確的操作。 – blex

+0

你必須在這裏包含更多的上下文。如果你想讓任何人知道服務器端發生的事情,你必須包含所有'voting.inc.php',那麼你正在向服務器發送一個POST請求({id:id,userId:userId} ' – rckrd

+0

那麼voting.inc.php的其餘部分實際上是與upvoteImage($ conn)函數完全相反的另一個函數。坦率地說,我對Ajax非常困惑,而且我很可能對我的問題寫得很糟糕。我的整個想法是能夠upvote/downvote沒有整個頁面刷新,並送我回到頂部。 –

回答

0

Ajax不是「張貼到功能」,它只是從服務器請求一個頁面的方式。

在你的頁面的代碼是應該決定做什麼的人,所以基本上你可以調用該函數在你的頁面:

function upvoteImage() { 
    .... 
} 
upvoteImage() 

檢查從客戶端得到的數據中,並根據這些數據 - 運行相關的功能:

function upvoteImage() { 
    .... 
} 
if ($_POST['do_upvote']) { 
    upvoteImage() 
} 
0

您也可以用類似"type:"upvote""type:"downvote"和PHP的一些標籤發送數據後調用功能,根據標籤調用函數upvoteImage或doenVoteImage。

0

你不會告訴ajax專門發佈一個函數。相反,請告訴ajax專門發佈到文件。

$('.arrowUp').click(function(){ 
    var id = $("input[name='id']").val(); 
    var userId = $("input[name='userId']").val(); 
    $.post('../includes/upvote.inc.php', {id: id, userId: userId}, function(data){ 
     alert(data); 
    }); 

}); 

$('.arrowDown').click(function(){ 
    var id = $("input[name='id']").val(); 
    var userId = $("input[name='userId']").val(); 
    $.post('../includes/downvote.inc.php', {id: id, userId: userId}, function(data){ 
     alert(data); 
    }); 

}); 

一個用於處理upvote,另一個用於downvote。

0

要麼與所述URL的查詢部分一起發送優選動作(給予好評或downvote),或者具有iduserId一起發送一個單獨的動作數據(給予好評或downvote)。

方法(1):

// for downvote, URL would be ../includes/voting.inc.php?action=downvote 
$.post('../includes/voting.inc.php?action=upvote', {id: id, userId: userId}, function(data){ 
    alert(data); 
}); 

和工藝在voting.inc.php頁以下方式請求,

if($_GET['action'] == "upvote"){ 
    // call upvoteImage function 
}else if($_GET['action'] == "downvote"){ 
    // call downvoteImage function 
} 

方法(2):

// for downvote, {id: id, userId: userId, action: 'downvote'} 
$.post('../includes/voting.inc.php', {id: id, userId: userId, action: 'upvote'}, function(data){ 
    alert(data); 
}); 

並在voting.inc中處理請求。PHP頁面下面的方式,

if($_POST['action'] == "upvote"){ 
    // call upvoteImage function 
}else if($_POST['action'] == "downvote"){ 
    // call downvoteImage function 
} 
0

你可以簡單地通過data-*屬性做到這一點,讓您的投票按鈕,這樣

<button class="vote" data-type="up" data-id="1" data-user-id="2">Up</button> 
<button class="vote" data-type="down" data-id="1" data-user-id="2">Down</button> 

那麼你可以簡單地發送這樣

$('.vote').click(function() { 
    var data = { 
     id:  $(this).data('id'), 
     userId: $(this).data('user-id'), 
     type: $(this).data('type') 
    }; 

    $.post('../includes/voting.inc.php', data, function(data){ 
     alert(data); 
    }); 
}); 
Ajax請求

最後,在您的服務器端,您可以檢查type和通話功能

if (isset($_POST['type']) && $_POST['type'] == "up"){ 
    // Call upvote function here 
} 
else if (isset($_POST['type']) && $_POST['type'] == "down"){ 
    // Call downvote function here 
} 
else { 
    // Abort if invalid 
} 
相關問題