繁体   English   中英

从数据库重新加载数据而无需刷新页面

[英]Reload data from database without refreshing page

我的Ajax成功更新了数据库中的某些信息,因此他应该更新一个显示此信息的元素。 但事实并非如此。 但是,刷新页面后,这会导致重新连接到db,信息更新。 这是函数:

function topUpTheBalance(){
        var d = document.getElementById("numberForm").value;
        $.ajax({
        type: 'POST',
        url: 'handler.php',
        data: {
            'topUpBalance':d,
        },
        success: function () {
            var k = document.getElementById("balanceNumber");
            k.innerHTML ="Your balance: "+ <?php echo $userRow['userBalance']; ?>;
        }
        }
        );
    }

和handler.php

<?php 
    ob_start();
    session_start();
    require_once 'dbconnect.php';

    if( !isset($_SESSION['user']) ) {
    header("Location: index.php");
     exit;
    }
    $res=mysqli_query($link, "SELECT * FROM users WHERE userId=".$_SESSION['user']);
    $userRow=mysqli_fetch_array($res);
    //$link =  mysqli_connect("localhost","username","password", "users");
    $bal = $userRow['userBalance']+$_POST['topUpBalance'];
    if($stmt = mysqli_prepare($link, "UPDATE users SET userBalance = ? WHERE userId = ?")){
            mysqli_stmt_bind_param($stmt, "di", $bal, $userRow['userId']);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_bind_result($stmt, $result);
            mysqli_stmt_fetch($stmt);
            mysqli_stmt_close($stmt);
    }
    mysqli_close($link);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
<?php ob_end_flush(); ?>

谁能建议我如何在不刷新页面的情况下更新此信息?

问题是您在编写k.innerHTML =“ string” + php代码时尝试在客户端运行php,而应在请求的php文件中生成输出,并检索该输出并将其放在此处。

https://www.w3schools.com/jquery/jquery_ajax_get_post.asp该链接说明了如何通过POST向服务器发送数据以及如何通过GET从服务器获取数据。

没有详细的信息可以帮助您,但是我注意到的第一件事是您的AJAX调用,要获取数据,您需要通过GET类型调用它:

$.ajax({
    'url': 'getdata.php', 
    'type': 'GET',
    'dataType': 'json', 
    'data': {'topUpBalance':d}, 
    'success': function(data) {
      // if the request calls properly
    },
    'error': function(data) {
      // if the request fails.
    }
});

最主要的是您应该从php端抛出输出,但尚未发送输出,应该使用isset($ _ POST ['topUpBalance']),然后转到其他过程,例如:

if(isset($_POST['topUpBalance'])){
     $res=mysqli_query($link, "SELECT * FROM users WHERE 
     userId=".$_SESSION['user']);
     $userRow=mysqli_fetch_array($res);
    $bal = $userRow['userBalance'] + $_POST['topUpBalance'];

   if($stmt = mysqli_prepare($link, "UPDATE users SET userBalance = ? 
     WHERE userId = ?")){
        mysqli_stmt_bind_param($stmt, "di", $bal, $userRow['userId']);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_bind_result($stmt, $result);
       //Send output echo ...... ;
        mysqli_stmt_fetch($stmt);
        mysqli_stmt_close($stmt);
      }
       mysqli_close($link);
}

在jQuery方面:-使用参数接收数据

function topUpTheBalance(){
    var d = document.getElementById("numberForm").value;
    $.ajax({
    type: 'POST',
    url: 'handler.php',
    data: {
        'topUpBalance':d,
    },
    success: function (data) {
     // use sent data or unsent data for processing  
    }
    }
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM