Как сделать инкремент на стороннее сервера через 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, время: 07:50. |