没有使用ajax将更新的值添加到服务器数据库?

时间:2015-02-02 10:13:18

标签: php jquery ajax database

我正在使用此代码调用ajaxvote.php

$('.vote').click(function(){
$.ajax({
url: 'ajaxvote.php',
type: 'POST',
cache: 'false',
success: function () { alert("Success!"); } ,
error: function () { alert("Error!"); }});
var self = $(this);
var action = self.data('action');
var parent = self.parent().parent();
var postid = parent.data('postid');
var score = parent.data('score');
if (!parent.hasClass('.disabled')) {
if (action == 'up') {
parent.find('.vote-score').html(++score).css({'color':'orange'});
self.css({'color':'orange'});
$.ajax({data: {'postid' : postid, 'action' : 'up'}});
}
else if (action == 'down'){
parent.find('.vote-score').html(--score).css({'color':'red'});
self.css({'color':'red'});
$.ajax({data: {'postid' : postid, 'action' : 'down'}});
};
parent.addClass('.disabled');

这是我网页上的代码

<div class="item" data-postid="<?php echo $rows['ID'] ?>" data-score="<?php echo $rows['VOTE'] ?>">
<div class="vote-span">
<div class="vote" data-action="up" title="Vote up"><i class="fa fa-camera-retro"></i></div>
<div class="vote-score"><?php echo $rows['VOTE'] ?></div>
<div class="vote" data-action="down" title="Vote down"><i class="fa fa-camera-retro"></i></div>
</div>

这是我的php代码

if ($_SERVER['HTTP_X_REQUESTED_WITH']) {
  if (isset($_POST['postid']) && (isset($_POST['action']))) {
    $postId = $_POST['postid'];
    if (isset($_SESSION['vote'][$postId])) return;
    $query = $mysqli - > query("SELECT VOTE from stories WHERE ID = $postId LIMIT 1");
    while ($rows = mysqli_fetch_array($query)) {
        if ($_POST['action'] === 'up') {
            $vote = ++$rows['VOTE'];
        } else {
            $vote = --$rows['VOTE'];
        }
        $mysqli - > query("UPDATE stories SET VOTE = $vote WHERE ID = $postId ");
        $_SESSION['vote'][$postId] = true;
    }
  }
}

我知道我可以连接到数据库,因为我可以登录。我也获得了上面设置的警报成功,但是,数据库中的值没有更新。

修改 我添加了更多我已经写过的Ajax代码。

1 个答案:

答案 0 :(得分:1)

通过ajax发布时,您需要发送您实际想要发布的数据。

var postData = {name:"Mister",lastName:"Frodo"}; //Array

$.ajax({
    url : "ajaxvote.php",
    type: "POST",
    data : postData,
    success: function(data, textStatus, jqXHR)
    {
        //Handle response
    },
    error: function (e) {
       // Handle error
    }
});

在这种情况下,需要抓取帖子ID和分数。您还需要获取单击的操作类型(通常通过对具有class =&#34的div进行单击事件绑定;投票&#34;。例如,让我们将其设置为&#34;现在:&#34;

var postId = $('div.item').attr('data-postid').val();
var score = $('div.item').attr('data-score').val();
var postData = {postId: postId, score: score, action: 'up'}

您现在可以发布&#34; postData&#34;到你的ajaxvote.php。

此外,您可以使用jQuery&#39; s $.POST method

  

$ .post(&#34; ajaxvote.php&#34;,{name:&#34; Mister&#34;,lastName:&#34; Frodo&#34;});

现在要解析表单,看看jQuery's serialize,它会通过您的表单获取每个输入的[name]属性以及值来创建数据字符串。

示例

name=Mister&lastName=Frodo

这是发送&#34;数据&#34;的理想选择。 $ .ajax中的属性。 Have a look at this answer for more regarding jQuery's serialize