从JavaScript Ajax返回laravel视图

问题描述

从Ajax调用controller方法后,尝试显示所需的视图时遇到麻烦。

这是JavaScript函数,在其中我将带有​​Ajax帖子的控制器方法称为“ create_pedido”。

$('.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');

解决方法

它可能返回同一视图,因为您没有告诉它应用程序的基本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方法中的return语句-还是文件夹'pedido'或'pedidos'-确保调用正确的视图:)