Как сделать инкремент на стороннее сервера через setInteval и ajax?
Мне нужно отправить число сделать в php инкремент, вернуть значение отправить его повторно потом еще раз прибавить единицу в PHP и все это через setInterval? Как это сделать? Максимум мне удалось прибавить единицу, больше число не увеличивается
<html>
<head>
<title></title>
<style>
body
{
margin: 0;
}
canvas
{
width:100%;
height:100%
};
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
<div id="result"></div>
<script>
var index = 0;
function ajax_query(filename,index)
{
ind = index;
$.ajax({
type: "POST",
url: 'test.php',
data: "flname="+filename+"&num="+ind,
dataType: "json",
success: function(response)
{
if(response.result=="success")
{
index = response.num;
jQuery('#result').html(index);
}
}
});
console.log(index);
}
function main()
{
setInterval(ajax_query,1000,'ex.txt',index);
}
main();
</script>
</body>
</html>
Код php:
<?php
$num = $_POST["num"];
$flname = $_POST["flname"];
$num++;
file_put_contents($flname,$num."\n",FILE_APPEND);
echo json_encode(array(
'result' => 'success',
'num' => $num
));
?>
|
Цитата:
Я пока не совсем понял... Сколько раз ты хочешь увеличивать тот "счетчик"? |
Цитата:
И в чем сакральный смысл этого действа? :blink: |
Цитата:
|
Цитата:
Но посылать, дождавшись ответа - это уже другая задача. |
Цитата:
|
У вас меняется только index - параметр функции. По сути - локальная переменная
А глобальная, описанная в строке 23 никак не меняется.
<html>
<head>
<title></title>
<style>
body
{
margin: 0;
}
canvas
{
width:100%;
height:100%
};
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
<div id="result"></div>
<script>
var index = 0;
function ajax_query(filename)
{
$.ajax({
type: "POST",
url: 'test.php',
data: "flname="+filename+"&num="+index,
dataType: "json",
success: function(response)
{
if(response.result=="success")
{
index = response.num;
jQuery('#result').html(index);
}
}
});
console.log(index);
}
function main()
{
setInterval(ajax_query,1000,'ex.txt');
}
main();
</script>
</body>
</html>
|
Я не могу понять глобальную переменную можно обозначить в PHP чтобы через Refresh 5 секунд, через ajax или еще как-нибуть увеличивалось?
|
PHP вообще нет дела до ваших переменных. Он получает какие то данные, и все. Он понятия не имеет откуда они взялись. И передает данные, и ему совершенно побоку куда вы их засуните, в глобальную или локальную переменную
|
Цитата:
Не важно как долго шел ответ от сервера? Если так - пойдет и setInterval()... |
Цитата:
|
Все уже не надо. Решила инкремент делать на javascript, а на php отправлять только результат. Работает.
javascript:
<html>
<head>
<title></title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.js"></script>
<div id="result">0</div>
<script type="text/javascript">
$(function(){
var interval = 3000;
function doAjax(i) {
$.ajax({
type: 'POST',
url: 'increment.php',
data: "num="+i,
dataType: 'json',
success: function (response) {
if(response.result=="success")
{
$('#result').html(response.num);
}
},
complete: function (data) {
setTimeout(doAjax, interval,i + 1);
}
});
}
setTimeout(doAjax, interval,1);
});
</script>
</script>
</body>
</html>
PHP
<?php
$num = $_POST["num"];
echo json_encode(array(
'result' => 'success',
'num' => $num
));
?>
|
Olga27, если это окончательный вид PHP скрипта, то он бесполезен чуть более, чем полностью.
|
Цитата:
|
Olga27,
Цитата:
- не будет задержек при обновлении счетчика на странице, ведь запрос к серверу отправлять не нужно; - серверу не придется заниматься бесполезными действиями такими как получить от клиента число и его же ему же вернуть. Без сервера ваш код может выглядеть так:
<html>
<head>
<title>Counter</title>
</head>
<body>
<div id="result"></div>
<script type="text/javascript">
(function tick(counter) {
document.getElementById('result').innerHTML = counter;
setTimeout(tick, 3000, ++counter);
})(0);
</script>
</body>
</html>
|
Nexus,
Это не весь код на сервере json документ который открывается.
$ourData = file_get_contents("data.json");
$outcls=json_decode($ourData,true);
Потом, туда будут вноситься данные и документ будет перезаписываться. Цитата:
|
| Часовой пояс GMT +3, время: 10:38. |