在不打开执行它的网页的情况下执行jquery ajax代码。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不打开执行它的网页的情况下执行jquery ajax代码。相关的知识,希望对你有一定的参考价值。

我用laravel 6做了一个项目,我的数据库表名是建筑物的id - wood - clay - iron - crop - created_at - updated_at1 - 25 - 54 - 57 - 63 - null - null,所以我做了jquery ajax代码来增加每列1作为测试。

游戏.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);

});

游戏

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use DB;
use AppLogs;
use AppBuildings;

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')); 
    }
 
}

但当我打开有game.js的村名页面时,这些代码就能用了

我想让这段代码在我没有打开这个页面的情况下工作。

答案

你可以创建一个 Artisan 命令,并运行 Task Scheduling技巧部分是每秒钟运行一次函数。

可以使用一个变通方法。

<?php

namespace AppConsoleCommands;
use CarbonCarbon;
use IlluminateConsoleCommand;

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();
另一答案

这可以用curl来实现 例子。

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

PS: 记得把url、token值和数据改成你想测试的实际值。

以上是关于在不打开执行它的网页的情况下执行jquery ajax代码。的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新的情况下执行 jquery ajax 来重新加载我的数据

jQuery Ajax 操作函数

jQuery Ajax 操作函数汇总

如何在不打开新命令行窗口的情况下使用“schtasks”执行计划任务?

Ajax是什么?

如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?