Ответ Json должен обновить значение Javascript и заменить глобальное начальное глобальное значение — требуется обходное решение

#javascript #php #fetch-api #jsonresponse #jsonencoder

#javascript #php #fetch-api #jsonresponse #jsonencoder

Вопрос:

Я пытаюсь разобраться в API выборки и получить. Из того, что я изучал, похоже, что это должно быть легко, но мой разум не понимает этого в полной мере. В моем игровом Javascript он начинается с глобальной переменной money= 2000.

Игра работает нормально, но когда кто-то уходит, переходит на страницу своего профиля и возвращается к игре, игра сбрасывается и начинает игру с самого начала и сбрасывает деньги обратно до 2000.

Что действительно безумно, так это то, что если я обновлю страницу, то, наконец, увижу правильное значение 2200 на веб-странице, которое есть в базе данных.

startgame.html

 <!DOCTYPE html>
<html>
    <head> 
<TITLE>Interactive Game</TITLE>
        <meta charset="UTF-8">
    </head>

    <body background="images/pvpcoinnew.png" style="width=120%" onLoad="updateMoney(); popup('popUpDiv'); click(); updown()" oncontextmenu="return false;">
<img background="images/pvpcoinnew.png">

<select id="textbox">
  <option value="1">1</option>
  <option value="5">5</option>
  <option value="10">10</option>
  <option value="25" selected>25</option>
  <option value="50">50</option>
  <option value="75">75</option>
  <option value="100">100</option>
  <option value="200">200</option>
  <option value="250">250</option>
  <option value="500">500</option>
  <option value="1000">1000</option>
</select> 
    <button type="click" id="button" onclick="enterWager(); return false;">Wager!</button>

    <p>Money: $<span id="money"></span><br></p>


        <script type="text/javascript" src="game.js"></script>

    </body>
</html>
 

В game.js в приведенном ниже файле деньги заданы в самом начале до 2000 года.
game.js

 //money = 2000;
window.money = 2000;
          
fetch('../php/moneyupdate/moneyupdate.php?money=value')
  .then((response) => {
    return response.json()
  })
  .then((money) => {
    // Work with JSON data here
    window.money = money
    console.log(money)
  })
  .catch((err) => {
    // Do something for an error here
  })
  
  
document.getElementById("money").innerHTML = window.money;
 

Когда php-файл запускается из выборки, статус равен 200. Полезная нагрузка ответа XHR возвращается с «2200», что соответствует тому, что есть в базе данных, но на веб-странице по-прежнему отображается 2000.

Вот moneyupdate.php файл

 <?php 
session_start();
if(empty($_SESSION['userid']))
{
    header("Location: ../login/index.php");
}
include('../../login/database.php');


if(isset($_GET["money"])) {
  $money = htmlspecialchars($_GET["money"]);
  $userid = $_SESSION['userid'];

try {
$db = DB();
$stmt = $db->prepare("SELECT money FROM usersystem WHERE userid=?");
$stmt->execute([$userid]);
$money = $stmt->fetchColumn();


// send a JSON encded money array to client
header('Content-type: application/json;charset=utf-8');
echo json_encode($money);
//}


}
catch(PDOException $e)
{
    $db = null;  
    echo $e->getMessage();  
}
}
// Notes: The json_encode function returns the JSON representation of the given value. 
//        The json_decode takes a JSON encoded string and converts it into a PHP variable.
?>
 

Спасибо за помощь и отклик!

Ответ №1:

При использовании GET[‘money’] добавьте это в свой URL «http:site.com/page.php?money=value «. window.money = 2000;

 fetch('../php/moneyupdate/moneyupdate.php?money=2000')
  .then((response) => {
    return response.json()
  })
  .then((money) => {
    // Work with JSON data here
     //working with json data depends on structure 
      // you can access data as money.money
    window.money = money
    console.log(money)
  })
  .catch((err) => {
    // Do something for an error here
  })
 

Комментарии:

1. Хорошо, это немного помогло. Наконец-то у меня есть «2200» в моей сети, XHR, ответ. Но на странице все еще отображается 2000. Мне нужно изучить ответ windows.money, я не думаю, что у меня есть то, что он предложил правильно. Пока спасибо!!!

Ответ №2:

если я правильно понял, вы можете использовать окно объекта для хранения вашей переменной, и вы можете получить к нему доступ из любого места

     window.money = 2000;
    
    fetch('../php/moneyupdate/moneyupdate.php')
      .then((response) => {
        return response.json()
      })
      .then((money) => {
        // Work with JSON data here
        window.money = money
        console.log(money)
      })
      .catch((err) => {
        // Do something for an error here
      })
 

Что касается части PHP, я хотел бы помочь, но это не моя сила. Я надеюсь, что мой совет вам помог.

Комментарии:

1. к сожалению, это не сработало. база данных показывает, а также на странице профиля 2200 денег, но игра по-прежнему показывает 2000, когда я возвращаюсь к ней со страницы профиля. Однако я буду больше изучать window, и полезная нагрузка ответа по-прежнему показывает var money = null;

2. Извините, я забыл упомянуть, в этой строке также должна использоваться переменная window.money: document.getElementById(«money»).innerHTML = money; Вы ее тоже изменили?

3. Если я вас правильно понимаю, вы говорите, чтобы изменить мой глобальный на window.money = 2000; ?

4. Хорошо, я изменил глобальное значение, как вы предложили. Сейчас это вроде как работает.

5. Теперь я думаю, что это может быть мой onLoad =»updateMoney ()

Ответ №3:

Решено — Сначала я не был уверен, куда поместить getElementById, не понимая, что он должен быть в пределах выборки. Я также поместил выборку в функцию, чтобы ее можно было вызвать из html-файла onload, который я показываю в html-файле страницы. Я также вставил его в updateMoney(). Это мгновенно решило мою проблему с необходимостью перезагрузки страницы, чтобы увидеть отображаемую денежную сумму.

game.js

  // window.money = 2000;
    function getMoney(){
    fetch('../php/moneyupdate/moneyupdate.php?money=value')
      .then((response) => {
        return response.json()
      })
      .then((money) => {
        // Work with JSON data here
        window.money = money
        document.getElementById("money").innerHTML = window.money;
        //console.log(money)
      })
      .catch((err) => {
        // Do something for an error here
      })
    }

function updateMoney() {
       if ( pot <= 0 ){ 
       if ( money <= 0 ){ 
       document.getElementById("aaa").innerHTML = "Lost? Here's A Loan !!!";
          money = 1000 ;}
      }
//       document.getElementById("money").innerHTML = money;
         document.getElementById("money").innerHTML = window.money;
      }
 

Наличие приведенного выше кода в JS было не всем, что мне нужно было сделать. Мне пришлось фактически запустить GetMoney(), чтобы он извлек файл php и получил столбец из базы данных.

startgame.html

 <body background="images/pvpcoinnew.png" style="width=120%" onLoad="getMoney(); updateMoney(); popup('popUpDiv'); click(); updown()" oncontextmenu="return false;">
 

Мне не нужно было ничего менять на странице php, но мне все еще интересно, действительно ли мне нужна эта строка, поскольку я ее ни для чего не использую. $money = htmlspecialchars($_GET[«деньги»]);

moneyupdate.php

 <?php 
session_start();
if(empty($_SESSION['userid']))
{
    header("Location: ../login/index.php");
}
include('../../login/database.php');


if(isset($_GET["money"])) {
  $money = htmlspecialchars($_GET["money"]);
  $userid = $_SESSION['userid'];

try {
$db = DB();
$stmt = $db->prepare("SELECT money FROM usersystem WHERE userid=?");
$stmt->execute([$userid]);
$money = $stmt->fetchColumn();


// send a JSON encded money array to client
header('Content-type: application/json;charset=utf-8');
echo json_encode($money);
//}


}
catch(PDOException $e)
{
    $db = null;  
    echo $e->getMessage();  
}
}
// Notes: The json_encode function returns the JSON representation of the given value. 
//        The json_decode takes a JSON encoded string and converts it into a PHP variable.
?>