2017-08-12 48 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 
} 
相关问题