我有一个javascript函数,每隔1秒钟就会重新加载页面,但是每当我尝试在其他页面上重新加载页面时。
return redirect()->back()->with('success','anything');
如果我在刀片文件中以
的形式收到它{{$success}}
成功数据为null,因为javascript setInterval()每1秒在所有页面上运行一次,已重置laravel会话。如果对setInterval方法进行了注释,则它可以正常工作。我该如何解决。
答案 0 :(得分:1)
之所以会这样,是因为back()
方法返回的301代码为response
,这是重定向HTTP代码... with()
方法并非没有用,因为它将在脚本结束后销毁。
换句话说,在返回之前将with
方法作为PHP声明进行映像,就像这样
$success = 'anything';
return ...;
例如,如果您要返回一个视图,则此更改将如下所示(假设该视图为something {{$success}} something
):
$success = 'anything';
$your_view = "something". e($success) ."something";
return $your_view;
这将返回200代码和该字符串作为内容,但是返回301正文,因此redirect()->back()
的正文将被忽略,因为它是重定向代码,并且紧跟在return redirect()->back()
之后所有变量都将被销毁,$success
元素也将被销毁。
按时间顺序,事情将按此顺序发生
$success
变量并将其分配给'anything'
redirect()->back()
方法,并传递给它$success
$success
$success
$success
在这里不存在,因为它是另一个脚本的一部分,因此在此目前它不存在更多Session::flash(key, value)
,它将在下一个脚本结束后销毁值,因此在脚本结束时Laravel会在之后触发重定向。所以您要做的是,首先刷新会话中的数据
use Session;
...
Session::flash('success','anything');
return redirect()->back();
然后在您要重新加载方面的视图中,如果会话中有与您正在使用的键相关联的内容,则添加消息,然后使用'success'
键:
@if(session()->has('success'))
{{session()->get('success')}}
@endif
就是这样