【问题标题】:Return laravel view from JavaScript Ajax从 JavaScript Ajax 返回 laravel 视图
【发布时间】:2023-03-28 18:46:01
【问题描述】:

在从 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');

【问题讨论】:

    标签: javascript php ajax laravel web


    【解决方案1】:

    它可能会返回到相同的视图,因为您没有告诉它应用程序的基本 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' - 确保调用正确的视图 :)

    【讨论】:

    • 我不确定“使用刀片在此处添加 Laravel url() 方法”是什么意思,我已经意识到问题是当我返回视图时.done(msg) 而不是去浏览器
    • 如果它正在使用 done 方法 - 我认为一切正常。 url() 方法是 Laravel 的帮助器,用于为正确的基本 URL 添加前缀。我的意思是使用刀片的{{}} 将允许您访问下面的 php。如果您要访问.done(msg),您只需在该消息中添加 JS 代码即可将其显示在您的页面上。如果您期待新的页面加载,请使用 <a> 链接而不是 ajax。 Ajax 将查找要加载的代码, 不会刷新页面或转到其他页面。
    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2013-11-10
    • 2015-04-22
    • 1970-01-01
    • 2020-01-06
    • 2016-05-16
    • 2019-12-19
    • 2020-07-21
    相关资源
    最近更新 更多