我在前端有一个模态视图(来自bootstrap的视图)。
单击提交按钮后,用户将转到控制器中的功能:
Route::post('post_question', array('uses' => 'QuestionController@postQuestion'));
在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中看到请求,但只是页面未被重定向。 模态是否以某种方式阻止了这种行为?
答案 0 :(得分:1)
您可以使用AJAX请求重定向。但是,您会发现结果不符合您的预期。
在重定向上,Laravel会将您的响应代码标头设置为重定向响应,然后将发送重定向页面的内容。
根据你想要处理事情的方式,你可以做两件事之一。
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
],
];
}
然后假设您正在进行一些jQuery AJAX调用,请更改您的成功回调(我在这里称之为questionSubmitSuccess
):
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;
}
}
您可以通过以下几种方式执行此操作:使用[Modify the URL without reloading the page浏览器历史记录API),或使用jQuery.load提交表单。
浏览器历史记录API可能会更容易,因为它仍然允许您处理响应错误,但它只适用于更现代的浏览器。 jQuery.load可能需要重写一些你的AJAX提交代码,并且更难处理错误之类的东西(它将替换你的页面内容,无论我能告诉你的状态代码),但它有更好的浏览器支持。
IMO,第一种方法更具有操作性,因为API端点可以通过除此单一实现之外的其他方式使用。 此外,与尝试在没有页面重新加载的情况下替换整个DOM相比,管理的故障点和错误状态更少。
答案 1 :(得分:0)
你可以将按钮放在窗体内,当你提交该按钮将数据从页面传递给控制器时,从控制器调用带有该数据的另一页面 比如返回View :: make('users.index,compact('data'));