выполнить код jquery ajax без открытия веб-страницы, которая его выполняет - PullRequest
0 голосов
/ 22 апреля 2020

я делаю проект с laravel 6, и у меня есть имя таблицы базы данных: id зданий - дерево - глина - железо - урожай - create_at - updated_at 1 - 25 - 54 - 57 - 63 - ноль - ноль, поэтому я делаю jquery ajax код для увеличения каждого столбца на 1 в качестве теста

game. js

$(document).ready(function(){

setInterval(function(){ 
    var dataString    = 'id=1';
    $.ajaxSetup({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')} });
    $.ajax({
    type: "post", 
    url: "{{ route('upgradeBuildings') }}",
    data: dataString,
    cache: false,
    beforeSend: function(){},
    success: function(data){
        $('.x').html(data);
    },
    error: function(err){console.log(err);}
    });
}, 1000);

});

LogsController

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use DB;
use App\Logs;
use App\Buildings;

class LogsController extends Controller
{

    public function upgradeBuildings(Request $request)
    {
        $id = $request->id;
        $updatecount = Buildings::increment("wood", "1");
        $buildings = Buildings::get()->first();
        $wood = $buildings->wood;
        return Response($wood);
    }

    public function village()
    {
        $buildings = Buildings::get();
        $users = DB::table('users')->get();
        $settings = DB::table('settings')->get()->first();
        return view('game.village', compact('buildings', 'settings', 'users')); 
    }
 
}

но этот код работает, когда я открыл деревню с именем страницы, в которой есть игра. js на ней

я хочу, чтобы этот код работал без открытия этого страница

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Вы можете создать команду Artisan и запустить Task Scheduling Задача состоит в том, чтобы запускать функцию каждую секунду.

Можно использовать обходной путь:

<?php

namespace App\Console\Commands;
use Carbon\Carbon;
use Illuminate\Console\Command;

class upgradeBuilding extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'buildings:upgrade';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'run every seconds';


    /**
     * Create a new command instance.
     * 
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $count = 0;
        while ($count < 59) {
            $startTime =  Carbon::now();

            // Your logic here

            $endTime = Carbon::now();
            $totalDuration = $endTime->diffInSeconds($startTime);
            if($totalDuration > 0) {
                $count +=  $totalDuration;
            }
            else {
                $count++;
            }
            sleep(1);
        }

    }
}

затем Вы планируете команду каждую минуту:

$schedule->command('buildings:upgrade')->everyMinute();
0 голосов
/ 22 апреля 2020

Это можно сделать с помощью curl. Пример:

curl --location --request POST 'http://yourhost.example/route/' --header 'X-CSRF-TOKEN:token' --data-raw 'yourdatahere'

PS: не забудьте изменить URL, значение токена и данные на фактические значения, которые вы хотите проверить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...