Laravel 5 return 查看然后重定向
Laravel 5 return view then redirect after
所以,我有这个功能,我如何在一段时间后达到 return 2 次观看?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class emailverified extends Controller
{
public function emailverified()
{
return view('auth.email.emailverified');
sleep(3);
return redirect()->away('https://www.xxx.xxx');
}
}
它只选择了一条路。我如何才能 return 在睡眠定时器 return 之后查看另一个视图?
您可以尝试 echo view('your view')
.
而不是返回视图
此时不应退出代码
然后添加你的睡眠代码并重定向,它应该可以工作我刚刚测试过它
尝试在控制器函数中使用 javascript
class emailverified extends Controller
{
public function emailverified()
{
echo "<script>setTimeout(function(){ window.location.href = 'https://www.xxx.xxx'; }, 3000);</script>";
return view('auth.email.emailverified');
}
}
您似乎在尝试向用户显示响应并在特定时间间隔内重定向到另一个页面,您尝试的是错误的,一旦您的代码在函数中使用 return 语句,脚本将不会进一步执行,您的重定向语句将不起作用..
最佳解决方案是,Return 响应为 ajax 响应,并且您可以轻松地在 peralal 中执行这两个操作,
$response = [
"ViewBag" => view('auth.email.emailverified')->render(),
'URLTOREDIRECT' => 'https://www.xxx.xxx',
];
return response()->json($response);
将以下事件绑定到您希望 ajax 调用发生的按钮或锚点,或者如果表单提交
$("#yourButtonId").live("click",function(event) {
var url = '{!! url("/your/path") !!}';
$.ajax({
type: "post", //depending on your route is get or post
url: url,
data: $("#yourformid").serialize()+'&data1='+$('#data1').val()+'&data2='+$('#data2').val()',
dataType : "json",
beforeSend: function(){
alert('loading'); //or your can show a user friendly loader
}
}).done(function(data) {
$("#yourDivId").html(data.ViewBag);
var delay = 1000; //millisecond
setTimeout(function(){ window.location = data.URLTOREDIRECT; }, delay);
}).fail(function(data) {
if(data.responseJSON){
var errors = data.responseJSON;
errorsHtml = '<ul>';
$.each( errors , function( key, value ) {
errorsHtml += '<li>' + value[0] + '</li>';
});
errorsHtml += '</ul>';
alert(errorsHtml);
}else{
alert(data.responseText);
}
});
event.preventDefault();
});
您可以使用header refresh
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class emailverified extends Controller
{
public function emailverified()
{
return view('auth.email.emailverified')->withHeaders(['refresh' => '3;url=https://www.xxx.xxx']);
}
}
所以,我有这个功能,我如何在一段时间后达到 return 2 次观看?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class emailverified extends Controller
{
public function emailverified()
{
return view('auth.email.emailverified');
sleep(3);
return redirect()->away('https://www.xxx.xxx');
}
}
它只选择了一条路。我如何才能 return 在睡眠定时器 return 之后查看另一个视图?
您可以尝试 echo view('your view')
.
此时不应退出代码
然后添加你的睡眠代码并重定向,它应该可以工作我刚刚测试过它
尝试在控制器函数中使用 javascript
class emailverified extends Controller
{
public function emailverified()
{
echo "<script>setTimeout(function(){ window.location.href = 'https://www.xxx.xxx'; }, 3000);</script>";
return view('auth.email.emailverified');
}
}
您似乎在尝试向用户显示响应并在特定时间间隔内重定向到另一个页面,您尝试的是错误的,一旦您的代码在函数中使用 return 语句,脚本将不会进一步执行,您的重定向语句将不起作用..
最佳解决方案是,Return 响应为 ajax 响应,并且您可以轻松地在 peralal 中执行这两个操作,
$response = [
"ViewBag" => view('auth.email.emailverified')->render(),
'URLTOREDIRECT' => 'https://www.xxx.xxx',
];
return response()->json($response);
将以下事件绑定到您希望 ajax 调用发生的按钮或锚点,或者如果表单提交
$("#yourButtonId").live("click",function(event) {
var url = '{!! url("/your/path") !!}';
$.ajax({
type: "post", //depending on your route is get or post
url: url,
data: $("#yourformid").serialize()+'&data1='+$('#data1').val()+'&data2='+$('#data2').val()',
dataType : "json",
beforeSend: function(){
alert('loading'); //or your can show a user friendly loader
}
}).done(function(data) {
$("#yourDivId").html(data.ViewBag);
var delay = 1000; //millisecond
setTimeout(function(){ window.location = data.URLTOREDIRECT; }, delay);
}).fail(function(data) {
if(data.responseJSON){
var errors = data.responseJSON;
errorsHtml = '<ul>';
$.each( errors , function( key, value ) {
errorsHtml += '<li>' + value[0] + '</li>';
});
errorsHtml += '</ul>';
alert(errorsHtml);
}else{
alert(data.responseText);
}
});
event.preventDefault();
});
您可以使用header refresh
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class emailverified extends Controller
{
public function emailverified()
{
return view('auth.email.emailverified')->withHeaders(['refresh' => '3;url=https://www.xxx.xxx']);
}
}