通过POST请求调用以下函数。我需要从我的数据库中检索URL并在新选项卡中打开该链接。我正在使用Redirect::away()
功能。但它给出MethodNotAllowedHttpException
。我试过在GET请求中调用此函数,它完全正常。
public function generateURL(Request $request) {
$screenRow = \App\ScreenshotRow::find($request->input('row_ID'));
$baseURL = $screenRow->BaseURL;
$screenshot = \App\Screenshot::where('Setname', '=', $screenRow->Setname)->get();
$pageURL = $screenshot[0]['PageURL'];
if ($baseURL == "") {
return Redirect::away($PageURL);
}
else
return Redirect::away($baseURL);
}
有没有办法在响应POST请求时调用此函数?
答案 0 :(得分:1)
我只需使用Ajax表单并使用Javascript重定向用户。
确保您的表单为ID
<form id="myForm" method="POST" action="{{ route('your.route') }}">
...
...
<button type="submit">Submit the Form</button>
使此表单与Ajax一起使用
<script>
$('#myForm [type="submit]').click(function(e){
e.preventDefault();
var form = jQuery(this).parents("form:first");
var dataString = form.serialize();
var formAction = form.attr('action');
$.ajax({
type: "POST",
url : formAction,
data : dataString,
success : function(data){
var url = $.parseJSON(data.responseText);
console.log(data);
// Redirect to a new tab with the given url
window.open(url.success, '_blank');
},
error : function(data){
var error = $.parseJSON(data.responseText);
console.log(error);
// Do what ever you want with an Error Message
alert(error)
}
},"json");
});
</script>
好的 - 如果表单收到成功消息,则执行success
函数,否则执行error
函数。
让我们转到处理请求的后端控制器
public function generateURL(Request $request) {
$screenRow = \App\ScreenshotRow::find($request->input('row_ID'));
$baseURL = $screenRow->BaseURL;
$screenshot = \App\Screenshot::where('Setname', '=', $screenRow->Setname)->get();
$pageURL = $screenshot[0]['PageURL'];
// Return a JSON Success Message with a Success HTTP Status Code
if ($baseURL == "") {
return response()->json(['success' => $PageURL], 200);
}
// Return a JSON Error Message with a Error HTTP Status Code
else
return response()->json(['error' => $baseURL], 400);
}
现在,如果您的后端抛出成功消息,则会调用Ajax表单的成功函数,该函数会根据您在后端控制器成功响应中传递的给定URL重定向到新选项卡。
注意强>
要避免Ajax请求上的tokenmismatchexception
,您应该将csrf_token
添加到meta
中的<head>
部分。
<meta name="csrf-token" content="{{ csrf_token() }}">
并在每个表单请求
上获取此csrf_token
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});