首页 > 解决方案 > 从 JavaScript Ajax 返回 laravel 视图

问题描述

从 Ajax 调用控制器方法后,我无法显示我想要的视图。

这是我用 Ajax 帖子调用控制器方法“create_pedido”的 JavaScript 函数。

$('.small-box').on('click', function(e) {
    e.preventDefault();
    let camarero_id = document.getElementById('id_camarero').value;
    let mesa_id = e.currentTarget.parentElement.attributes.idMesa.value;
    let mesa_estado = e.currentTarget.parentElement.attributes.disponible.value;
    console.log('ID Mesa: ' + mesa_id);
    console.log('Disponible: ' + mesa_estado);
    console.log('ID Camarero: ' + camarero_id);
    if (mesa_estado == 1) {
        console.log('Crear')
        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            type: "POST",
            url: 'create_pedido',
            data: { mesa: mesa_id, camarero: camarero_id }
        }).done(function(msg) {
            console.log('Success');
        });
    } else {
        console.log('Editar')
    }
});

这是控制器方法,除了返回它应该去的视图之外,它做所有事情。

public function create(Request $request)
{
    $mesa = Mesa::find($request->mesa);
    $camarero = Trabajador::find($request->camarero);
    $alimentos = Alimento::all();
    $categorias = Categoria::all();
    Log::channel('stderr')->info($mesa);
    Log::channel('stderr')->info($camarero);
    return view('pedido.create', compact('mesa', 'camarero','categorias', 'alimentos'));
}

而不是在“Log::channel...”之后转到“pedidos.create”视图,而是留在调用它的同一视图中。

这是我的路线:

Route::resource('/', 'IndexController');
Route::resource('inicio', 'IndexController');
Route::resource('trabajador', 'TrabajadorController');
Route::resource('pedido', 'PedidoController');
Route::post('create_pedido','PedidoController@create');
Route::resource('alimento', 'AlimentoController');
Route::resource('orden', 'OrdenController');
Route::resource('mesa', 'MesaController');
Route::post('mesa_changestate', 'MesaController@change_state');

标签: javascriptphpajaxlaravelweb

解决方案


它可能会返回相同的视图,因为您没有告诉它应用程序的基本 URL。Laravel 有一个很好的方法来帮助这里,它会在路由之前加上适当的基础:

$.ajax({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    },
    type: "POST",
    url: '{{url("create_pedido")}}', // use blade to add in the Laravel url() method here
    data: { mesa: mesa_id, camarero: camarero_id }
}).

同样对于控制器create方法中的返回语句-是文件夹'pedido'或'pedidos'-确保调用正确的视图:)


推荐阅读