问题描述
从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'-确保调用正确的视图:)