在ajax调用之后,php函数的按钮不起作用

时间:2016-04-25 17:39:26

标签: javascript php jquery ajax

我试图在数据库中添加或减去pts字段,如果按下按钮然后更新页面上的内容,我还有一个显示pts的字段,在一个计时器上Ajax自动刷新。

我正在使用此脚本来调用页面:

$(document).ready(function(){
        var timer, delay = 1000;                // 1 second(s) counted in milliseconds
        var Pts = '';                          //ID value of users answer
        var info = {'userPts': Pts};           //naming POST for php
        timer = setInterval(function(){
            $.ajax({
                url: "inc/ans.php",            //sends to ans page where php function updates DB
                type: "POST",
                data : info,                   //stuff being sent to php
                success:function(data)
                {
                    $("div #ans").html(data);  //Retrieves answers made by user
                }
            });
        }, delay);

我的问题是,当我拨打此电话时,目前单击按钮的唯一方法是手动刷新整个页面,然后我可以单击按钮并更新用户pts值。我可以做一个或另一个但不能同时做,我可以在它自动刷新内容的地方,但我不能按下按钮完成动作。我可以按下按钮,但我无法自动刷新内容。

加法和减法的PHP函数大致相同:

    function addPoint($mysqli, $id)
    {
        $stmt = $mysqli->prepare('
        UPDATE tbl_user 
        SET user_pts = user_pts + 1
        WHERE user_id = ?');
        $stmt->bind_param('i', $id);
        $stmt->execute();
        $rows = $stmt->affected_rows; 
        $stmt->close();
        if($rows == 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

这两个函数之间的区别仅在于它的-1或+1。关于为什么会这样的想法?是Ajax调用是否会干扰PHP函数或vic。反之亦然?

编辑:这是使用按钮向教师显示的代码

    function getScore_I($mysqli)
    {
        $stmt = $mysqli->prepare('
        SELECT user_name, user_pts, user_id
        FROM tbl_user');
        $stmt->execute();
        $stmt->bind_result($user, $pts, $id);
        $O ="";
        $x = 1;
        $O.="<table style=\"text-align:center;width: 100%\"><form action=".$_SERVER['PHP_SELF']." method=\"POST\">";
        while($stmt->fetch())
        {
            if($x%2)
            {
                $O.= "<tr style=\"text-align:center;width: 100%\">
                        <td>".$user."</td>
                        <td>
                            <button name=\"userIDmiunus\" type=\"submit\" value=\"".$id."\">-</button>
                        </td>
                        <td>".$pts."</td>

                        <td>
                            <button name=\"userIDplus\" type=\"submit\" value=\"".$id."\">+</button>
                        </td>
                    </tr>";
                $x++;
            }
            else
            {
                $O.= "<tr style=\"text-align:center;width: 100%\">
                        <td>".$user."</td>
                        <td>
                            <button name=\"userIDmiunus\" type=\"submit\" value=\"".$id."\">-</button>
                        </td>
                        <td>".$pts."</td>

                        <td>
                            <button name=\"userIDplus\" type=\"submit\" value=\"".$id."\">+</button>
                        </td>
                    </tr>";
                $x++;
            }
        }
        $O.= "</form></table>";
        // close statement
        $stmt->close();
        return $O;
    }

1 个答案:

答案 0 :(得分:2)

按钮元素是否包含在通过AJAX引入的代码中?如果是这样,您需要使用.on(),如:

$(document).on('click', '.buttonClassName', function(){
    //do your click code here
});

检查您的代码,看起来您只是在执行.load(),这是$.ajax()的快捷方式。 我也更喜欢在所有情况下使用$.ajax() - 使用$.load()$.get()$.post()的结构不如完整$.ajax()

当新数据通过.html()注入DOM时,任何控件都不会绑定到javascript代码,因为绑定代码是在注入之前运行的。两个解决方案:您还可以注入一些额外的javascript并重新创建这些绑定 - 这意味着DOM中存在大量重复的代码 - 或者您可以使用.on(),它适用于当前在DOM中的元素,但也适用于所有未来注入DOM的具有该特定类或ID的元素或您使用的任何jQuery选择器。

另一种可能是您需要使用AJAX来访问您的PHP函数。有关AJAX,请参阅this post 及其引用的帖子/指向的链接。看看例子。

是的,您可以在.on(),内调用另一个AJAX函数,这可能就是您需要做的。

回想一下,AJAX只是在呈现网页后运行PHP代码的方法,而无需刷新/离开当前页面。

代码看起来像这样:

$(document).on('click','.buttonClass', function(){
    var Pts = '';                          //ID value of users answer
    var uid = $('hidden_input_where_you_stored_userID').val();
    var info = {'userID': uid, 'userPts': Pts};           //naming POST for php
    $.ajax({
        url: "inc/another_file.php",
        type: "POST",
        data : info,
        success: function(data) {
            //whatever you need to do after updating point score
        }
    });
});

<强> another_file.php:

<?php
    $id =  $_POST['userID'];
    $pts = $_POST['userPts']; 
    //do your DB update