php重定向到laravel中的另一个页面

php重定向到laravel中的另一个页面,laravel,Laravel,我在前端有一个模态视图(来自引导的视图) 单击提交按钮后,用户将进入控制器中的功能: Route::post('post_question', array('uses' => 'QuestionController@postQuestion')); 在问题的最后,我想转到另一页 我试过: return Redirect::to('mywebsite/question/1'); return Response::make( '', 302 )->header( 'Location',

我在前端有一个模态视图(来自引导的视图)

单击提交按钮后,用户将进入控制器中的功能:

Route::post('post_question', array('uses' => 'QuestionController@postQuestion'));
在问题的最后,我想转到另一页

我试过:

return Redirect::to('mywebsite/question/1');
return Response::make( '', 302 )->header( 'Location', 'mywebsite/question/1' );
return Redirect::route('question/'.$question_id)->with("question",Question::find($question_id));
header("Location: mywebsite/question/$question_id");
但似乎没有一个有效

问题是,我可以在XHR中看到请求,但页面没有重定向。
模态是否以某种方式阻止了行为

您可以使用AJAX请求重定向。然而,你会发现结果并不是你所期望的那样

在重定向时,Laravel应将您的响应代码头设置为重定向响应,然后发送重定向页面的内容

你可以做两件事中的一件,这取决于你想如何处理事情

  • 使用元数据参数将JSON响应发送回提交的表单,然后在success函数中使用此元数据设置
    window.location
  • 您的Laravel控制器对帖子的响应有点像这样:

    public function postQuestion()
    {
        // DO stuff to set your $question
    
        return [
            'question' => $question,
            'meta' => [
                'redirect_url' => url('mywebsite/question/'.$question->id),
                'status' => '400',
                // Any other meta data you may want to send
            ],
        ];
    }
    
    然后假设您正在执行一些jqueryajax调用,更改成功回调(我在这里称之为
    questionSubmitSuccess
    ):

  • 继续从控制器重定向,然后执行与rails turbo链接更相似的操作,并用Javascript替换整个页面:
  • 您可以通过以下几种方式完成此操作:使用[browser History API],或使用提交表单

    浏览器历史API可能更容易工作,因为它仍然允许您处理响应错误,但它只适用于更现代的浏览器。 加载可能需要重写一点AJAX提交代码,并且更难处理错误之类的事情(不管我能告诉你的状态代码是什么,它都会替换页面内容),但它有更好的浏览器支持


    在我看来,第一种方法更具操作性,因为API端点可由除此单一实现之外的其他方法使用。
    此外,与在不重新加载页面的情况下替换整个DOM相比,要管理的故障点和错误状态更少。

    您可以将按钮放入表单中,当您提交该按钮时,将数据从页面传递到控制器,并从控制器调用另一个页面
    像return View::make('users.index,compact('data'));

    你不能从ajax请求重定向。@itachi darh!你的真命天子。如何在javascript中重定向。。。
    questionSubmitSuccess = function (data) {
        // Anything you may want to do before redirecting the user
    
        if (data.meta.redirect_url) {
            // This redirects the page
            window.location = data.meta.redirect_url;
        }
    }