Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать инкремент на стороннее сервера через setInteval и ajax? (https://javascript.ru/forum/misc/84276-kak-sdelat-inkrement-na-storonnee-servera-cherez-setinteval-i-ajax.html)

Olga27 27.07.2022 15:19

Как сделать инкремент на стороннее сервера через 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
   ));
?>

ksa 27.07.2022 15:52

Цитата:

Сообщение от Olga27
и все это через setInterval?

В этом он тебе не поможет...

Я пока не совсем понял... Сколько раз ты хочешь увеличивать тот "счетчик"?

ksa 27.07.2022 15:56

Цитата:

Сообщение от Olga27
Мне нужно отправить число сделать в php инкремент, вернуть значение отправить его повторно потом еще раз прибавить единицу в PHP

Т.е. некое число должно трижды побывать на сервере, каждый раз там увеличиваясь на единицу?

И в чем сакральный смысл этого действа? :blink:

Olga27 27.07.2022 15:56

Цитата:

Я пока не совсем понял... Сколько раз ты хочешь увеличивать тот "счетчик"?
Я хочу чтобы счетчик просто увеличивался и все. Неважно сколько раз.

ksa 27.07.2022 15:57

Цитата:

Сообщение от Olga27
Я хочу чтобы счетчик просто увеличивался и все.

Это одна задача...

Но посылать, дождавшись ответа - это уже другая задача.

Olga27 27.07.2022 15:58

Цитата:

И в чем сакральный смысл этого действа?
Мне нужно обозначить переменную которая будет увеличиваться на сервере php. Мне все равно, пускай будет это сделано через Refresh: 5 секунд. Вообщем обозначить как-то глобальную переменную которая будет увеличиваться каждые несколько секунд на php.

voraa 27.07.2022 15:59

У вас меняется только 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>

Olga27 27.07.2022 16:01

Я не могу понять глобальную переменную можно обозначить в PHP чтобы через Refresh 5 секунд, через ajax или еще как-нибуть увеличивалось?

voraa 27.07.2022 16:07

PHP вообще нет дела до ваших переменных. Он получает какие то данные, и все. Он понятия не имеет откуда они взялись. И передает данные, и ему совершенно побоку куда вы их засуните, в глобальную или локальную переменную

ksa 27.07.2022 16:12

Цитата:

Сообщение от Olga27
Мне нужно обозначить переменную которая будет увеличиваться на сервере php. Мне все равно, пускай будет это сделано через Refresh: 5 секунд.

И не важно успешно сервер то сделал или нет?
Не важно как долго шел ответ от сервера?

Если так - пойдет и setInterval()...

voraa 27.07.2022 16:13

Цитата:

Сообщение от Olga27
Вообщем обозначить как-то глобальную переменную которая будет увеличиваться каждые несколько секунд на php.

После того, как скрипт php отработал, все пропадает. Нет больше у него никаких переменных, ни глобальных, ни локальных. Он не висит в памяти постоянно.

Olga27 27.07.2022 18:20

Все уже не надо. Решила инкремент делать на 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
   ));
?>

Nexus 27.07.2022 18:25

Olga27, если это окончательный вид PHP скрипта, то он бесполезен чуть более, чем полностью.

Olga27 27.07.2022 23:06

Цитата:

если это окончательный вид PHP скрипта, то он бесполезен чуть более, чем полностью.
Какие ваши агрументы, что этот код бесполезен, другими словами как сделать его полезным? Альтернативный вариант будет?

Nexus 28.07.2022 00:04

Olga27,
Цитата:

Сообщение от 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>

Olga27 28.07.2022 00:47

Nexus,
Это не весь код на сервере json документ который открывается.
$ourData = file_get_contents("data.json");

$outcls=json_decode($ourData,true);

Потом, туда будут вноситься данные и документ будет перезаписываться.
Цитата:

Array
(
[response] => Array
(
[0] => Array
(
[title] =>
[text] =>


)
[1] => Array
(
[title] =>
[text] =>


)
)
....
Счетчик который увеличивается в JS это элемент массива response.


Часовой пояс GMT +3, время: 07:50.