首页 > 解决方案 > 我可以使用 Laravel 框架自动执行计算过程并直接更新表格吗?

问题描述

我是编程新手,目前正在使用 Laravel 框架开发一个量规评估模块。这是我处理控制器中标记计算的代码。但是,我想在不刷新页面的情况下实时更新计算。由于我缺乏 Javascript 和 JQuery 方面的知识,请问有没有什么方法或示例代码可以实时执行该过程?

 foreach ($rubricArtifactDetails as $rubricArtifactDetail) {
            foreach ($rubricCriteriaDetails as $rubricCriteriaDetail) {
                if ($rubricArtifactDetail['rubricArtifactId'] == $rubricCriteriaDetail['rubricArtifactId']) {
                    $finalMark = 0;
                    if ($rubricCriteriaDetail['markSupervisor'] !== null && $rubricCriteriaDetail['markModerator'] !== null) {
                        $finalMark = ($rubricCriteriaDetail['markSupervisor'] + $rubricCriteriaDetail['markModerator']) / 2;
                    } elseif ($rubricCriteriaDetail['markSupervisor'] === 0 || $rubricCriteriaDetail['markModerator'] === 0) {
                        $finalMark = ($rubricCriteriaDetail['markSupervisor'] + $rubricCriteriaDetail['markModerator']) / 2;
                    } elseif ($rubricCriteriaDetail['markSupervisor'] === null && $rubricCriteriaDetail['markModerator'] === null) {
                        $finalMark = 0;
                    } elseif ($rubricCriteriaDetail['markSupervisor'] === null) {
                        $finalMark = $rubricCriteriaDetail['markModerator'] / 2;
                    } elseif ($rubricCriteriaDetail['markModerator'] === null) {
                        $finalMark = $rubricCriteriaDetail['markSupervisor'] / 2;
                    }
                    $finalMarkArray[$t] = $finalMark;
                    $t++;
                }
            }
        }

这是我的评分标准输出示例,但它仅通过单击提交按钮更新标记。 https://imgur.com/a/36Ui93K

标签: javascriptphpjquerylaravel

解决方案


实时实现此目的的唯一方法是使用 AJAX。jQuery$.ajax是执行此任务的最简单方法之一。

  • 为计算创建一个独立的网络路由并将其链接到相应控制器的方法。
  • $.ajax在您的视图或脚本文件中创建一个函数。(虽然 *.blade.php 是执行此函数的更好位置,因为您可以轻松访问变量。)
// Javascript part
$.ajax({
    url: `{{ route() }}`,
    method: 'GET/POST/PUT/DELETE',
    data: {
        // If you want to send some params to the controller.
        // You will receive the contents in `$request` object.
    },

    done: result => {
        // This callback is only called when your request succeeds.
        // This is the place where you need to update your HTML via DOM manipulation.
    },
    
    fail: result => {
        // This callback is only called when your request fails.
    },

    always: () => {
        // This callback is always called after a specific request is completed.
    }
});
<?php
class TestController extends Controller {
    public function calculate(Request $request) {
        // DO YOUR CALCULATION
        // Instead of returning view, return a JSON from here.
        return response()->json(['status' => true, 'result' => 'YOUR_RESULT']);
    }
}
?>

jQuery API 文档:https: //api.jquery.com/jquery.ajax/ Laravel JSON 响应文档:https ://laravel.com/docs/7.x/responses#json-responses


推荐阅读