Php AJAX不与我的Php脚本和mysql一起工作


Php AJAX not working in conjunction with my php script and mysql

所以我在这里发布了我的第一个PHP函数,我很自豪,但我最近才了解AJAX,想测试一下。不幸的是,我不能使它工作。


我的经验: PHP(3周)。CSS3, HTML, Basic Javascript.


我的问题:让AJAX工作。我希望ajax从php文件中获得数据,该文件从我的测试服务器(Xampp)数据库中获得选票。因此,每次用户单击好的或坏的AJAX时,都应该显示新的结果,而不刷新页面。然而,问题是:A)我的if语句通过检查isset($_POST)工作,如果我通过AJAX调用,它将不再工作。B)防止刷新。C)每次点击后进行AJAX更新。我知道我就要成功了,我只是缺少了一些东西,老实说,我不知道到底是什么。


我尝试了什么:检查我的数据库连接。检查如果我的php代码没有ajax工作,它做得很好(我只是在这里显示一半的功能,精简版,为了简单起见)。试图更改提交到按钮。缓存清除。Jquery在我的文档的头部,路径是正确的。看了教程,读了文档,但我就是不去任何地方,可能是因为缺乏经验。

编辑:会话和一切php工作良好。如果我的会话开始和数据库连接包含在最上面。


总结:我如何修复这个ajax,使它总是更新我的数字?


让我知道如果你想让我解释我的php代码的一部分。如有必要,我愿意对零件提出意见。


JQUERY/AJAX CODE
function vote() {
        var request = $.ajax({
            url: "php/core/voting_system.php",
            type: "POST",           
            dataType: 'html'
        });
        request.done(function(vote_sum) {
            $("#votes").html(vote_sum);         
        });
}

HTML代码:

<div id='votes'></div>
<form id="good" action="" method="post">
    <input type="submit" name="good" onclick="vote()" value="+">
</form>
<form id="bad" action="" method="post">
    <input type="submit" name="bad" onclick="vote()" value="-">
</form>

在HTML中你不需要<form>,你正在用AJAX,对吗?

<div id='votes'></div>
<button onclick="vote('good');">+</button>
<button onclick="vote('bad');">-</button>

在JavaScript中,postajax函数更容易使用

function vote(gb) {
  $.post("php/core/voting_system.php", { vote: gb }, function(vote_sum) {
    $("#votes").html(vote_sum);         
  });
}

在PHP中,提取投票并根据需要使用它(添加验证/卫生):

$vote = $_POST['vote']; // either 'good', or 'bad'
// do what you need with it

TL;博士版:

您没有在$.ajax调用中包含数据字段。此外,您的脚本没有检查按下了哪个按钮。

长版本

当您执行$.ajax调用时,您无法将任何数据附加到请求。这很容易做到,像这样:

  $.ajax({
    method: 'POST',
    dataType: 'json',
    data: ...someJSONData...
  });

通常,您将希望将JSON传递给任何东西,因为它可能包含您通常希望在客户端和服务器之间进行通信的复杂对象结构。你显然不在这个例子中,但如果你想学习这些东西,最好从正确的方式开始。

javascript和php都使使用JSON格式非常容易:JS的JSON.stringify()和JSON.parse(), php的json_encode()和json_decode()。

function vote(e) {
  // e.target.id stores the id of the button that was clicked
  var data = {vote: e.target.id}
  $.ajax({
    method: 'POST',
    dataType: 'json',
    data: JSON.stringify(data),
    ... callbacks and other properties ...
  });
}
document.getElementById("good").addEventListener("click", vote);
document.getElementById("bad").addEventListener("click", vote);

这将是一个如何解决问题的简单例子。如果您在通过json_decode()运行数据后在php脚本中执行一个简单的var_dump,您将得到一个很好的关联数组:

[
  'data' => 'good',
]

我希望这能说明以这种格式传递数据是多么容易。

还要注意,我在javascript中定义了事件处理程序。这通常是更好的,因为你把所有的javascript放在一个地方,它使事情更干净,更容易调试。

就像Jay说的,您不是通过AJAX发送POST数据。您还需要从PHP回显您的结果。

function vote(event) {
     event.preventDefault();
     $.ajax({
         url: "php/core/voting_system.php",
         type: "POST",           
         dataType: 'html',
         data: 'bad='+$('input[name="bad"]').val()+'&good='+$('input[name="good"]').val(),
         success: function(data){
             var votes = $("#votes").val().empty();
             $("#votes").html(data+votes);
         }
    ]);
}