Laravel 8:通过POST方法向控制器发送 AJAX (获取)数据

cld4siwp  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(172)

我试图在一个控制器中获取请求数据,但是Laravel没有显示任何内容。在其他控制器中使用GET方法我可以很容易地做到这一点。
在这种情况下,我不能使用页面重定向,所以 AJAX 是我唯一的选择。
我已经搜索了整个stackoverflow,但没有找到任何工作。
我的代码:
web.php

Route::post('adiciona_credito', [AdicionaCreditoController::class, 'post_credito'])->name('adiciona_credito.post');

AdicionaCreditoController.php

<?php
    namespace App\Http\Controllers\MixVirtual;

    use App\Http\Controllers\Controller;
    use Exception;
    use Illuminate\Http\Request;

    class AdicionaCreditoController extends Controller {
        public function post_credito(Request $request): array {
            dd(request()->all()); // print the request
            try {
                // Saving data to the database.
                $retorno['msg']           = 'success';
            }
            catch (Exception $e) {
                $retorno['msg']    = $e->getMessage();
            }
            header('Content-type: application/json;charset=utf-8');
            return $retorno;
        }
    }

ajax.js

document.getElementById('form_adiciona_credito').addEventListener('submit', function(event) {
        event.preventDefault();
    
        let headers = new Headers();
        headers.append('X-CSRF-TOKEN', document.querySelector('[name="csrf-token"]').getAttribute('content'));

        let options = {
            method : 'POST',
            headers: headers,
            body   : JSON.stringify({
                credito      : document.getElementById('credito').value,
                justificativa: document.getElementById('justificativa').value
            })
        }

        fetch('./adiciona_credito', options).then(function(response) {
            if (!response.ok) {
                // Treating errors
            }
            response.json().then(function(return) {
                // AJAX callback
            });
        });
    }

HTML形式

<form id="form_adiciona_credito" method="post" action="{{route('adiciona_credito.post')}}">
                    @csrf
                    <div class="row">
                        <div class="col-12 my-1">
                            <input required type="number" class="form-control" id="credito" placeholder="Cr&eacute;dito para adicionar">
                        </div>
                        <div class="col-12 my-1">
                            <textarea required class="form-control" id="justificativa" placeholder="Justificativa"></textarea>
                        </div>
                        <div class="col-12 my-1">
                            <button class="btn btn-success float-end" id="btn_adiciona_credito">Add
                            </button>
                        </div>
                    </div>
                </form>

浏览器网络选项卡屏幕截图:

zvokhttg

zvokhttg1#

经过长时间的搜索,我发现需要使用request()->getContent();来获取POST方法的主体参数。

相关问题