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

时间:2016-03-26 09:36:07

标签: javascript ajax laravel redirect

我两个小时后完全陷入困境,绝对需要你的帮助。免责声明:我不是一个程序员 - 只是一个试图嘲笑一个想法的人。

所以我的页面实际上工作正常,但我考虑将内容从模式弹出窗口移动到实际的子页面。含义:如果用户点击某个按钮,则会收集当前页面中的某些数据点并将其传递到另一个视图,该视图将使用数据点作为输入进行渲染。

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

我的想法:

  1. 不带参数的正常重定向:内部链接
  2. 更新页面内容,无需重定向,但带参数:Ajax
  3. 结合我的想法 - >使用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调用中重定向。不幸的是,该帖子并没有暗示如何改为。

    有人可以帮助我吗?

    一切顺利

2 个答案:

答案 0 :(得分:0)

在你的购买方法中 -

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
    } 

},

答案 1 :(得分:0)

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

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

P.S。如果您还想更改网址,请使用历史记录操作功能。

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