#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.
?>