很难理解laravel中的重定向/路由

Having a hard time understanding redirecting / routing in laravel

本文关键字:重定向 路由 难理解 laravel      更新时间:2023-09-26

两个小时后我就完全被困了,肯定需要你的帮助。免责声明:我不是一个程序员,只是一个试图模仿一个想法的人。

所以我的页面实际上运行得很好,但我考虑过将内容从模式弹出窗口移动到实际的子页面。意思是:如果用户点击按钮,当前页面中的一些数据点将被收集并传递到另一个视图,该视图将使用数据点作为输入进行渲染。

编辑:为了澄清:按钮在/results.php上,数据是动态生成的。该方法应该从这里获取一些数据点,生成一个新的视图,并在/buy.php或/buy/custom.php 中渲染它

我的想法:

  1. 不带参数的正常重定向:内部链接
  2. 更新页面内容而不重定向,但使用参数:Ajax

因此,结合我的想法->使用ajax并返回一个新的全新视图。

我尝试过的:

$("body").on("click", ".fa-shopping-cart", function() {
var $para1 = $(this).attr("data1");
var $para2 = $(this).attr("data2");
var $para3 = $(this).attr("data3");
var $para4 = $(this).attr("data4");
$.ajax({
url: "buy",
data: {
    a: $para1,
    b: $para2,
    c: $para3,
    d: $para4
},
beforeSend: function (xhr) {
    var token = $('meta[name="csrf_token"]').attr('content');
    if (token) {
       return xhr.setRequestHeader('X-CSRF-TOKEN', token);
    }
},
type: "post", 
success: function(response){ 
    console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) { 
      console.log(JSON.stringify(jqXHR));
      console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});});

路由:

Route::post('/buy', 'PageRouting@buy');

控制器:

public function buy()
{
    $para1= $_POST['a'];
    $para2 = $_POST['b'];
    $para3 = $_POST['c'];
    $para4 = $_POST['d'];
    // some magic to output $data
  return view('pages.buy', compact("data"));
}

buy.blade.php存在,并在foreach循环的帮助下显示$data。

所以,当我第一次点击按钮时,显而易见的事情发生了:

视图("pages.buy")以纯html记录/显示在我的控制台中,而不是在浏览器中呈现。

现在我坐在这里已经两个小时了,我一点也不知道。我读过一些博客文章,说您不能在ajax调用中重定向。不幸的是,这篇帖子并没有给出任何关于如何做到这一点的提示。

有人能帮我吗?

所有最佳

如果你想用响应替换整个文档,你必须使用document.write,但这不是最好的方法。如果你需要返回视图,为什么不使用普通表单提交?

success: function(response){ 
    document.write(response);
},

附言:如果您还想更改url,请使用历史处理功能。

https://developer.mozilla.org/en-US/docs/Web/API/History_API

在您的购买方法-中

public function buy ()
{
    ....//some stuff to get $data
    $html = view('pages.buy', compact("data"))->render();
    return response()->json([
        'success' => true,
        'html'    => $html
    ])
}

在您的ajax成功功能中

success: function(response){
    if(response.success)
    {
        $('#elementId').html(reponse.html) // or whatever you need
    } 
},