2017-06-03 304 views
2

我的Ajax成功更新了數據庫中的一些信息,因此他應該更新一個顯示此信息的元素。但事實並非如此。但是,刷新頁面後,導致重新連接到數據庫,信息更新。下面是函數:從數據庫刷新數據,無需刷新頁面

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(); ?> 

任何人都可以建議我如何更新而無需刷新頁面的信息?

+0

呼叫在哪裏? balanceNumber – mplungjan

+0

它從html中的按鈕調用。 HTML文件非常大,所以我不想在這裏添加它。但正如我所說,阿賈克斯使他的工作,但他不能刷新數據,因爲它沒有在頁面上更新 –

+0

我看不到你的代碼中的按鈕。 – mplungjan

回答

0

問題在於,當您寫k.innerHTML =「string」+ php代碼 時,您正試圖在客戶端運行php。您應該在請求的php文件中生成輸出並檢索該輸出並把它放在這裏。

https://www.w3schools.com/jquery/jquery_ajax_get_post.asp 該鏈接解釋瞭如何通過POST將數據發送到服務器,並通過GET從服務器獲取數據。

0

沒有詳細的信息來幫助你,但我注意到的第一件事是你的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. 
    } 
}); 
0

主要的是,你應該拋出輸出從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 
    } 
    } 
    ); 
} 
相關問題