我的行为名为getuser
,由ajax
调用。
这是我的ajax
var $_token = $('#token').val();
var BASE = "{{ URL::to('/') }}";
$.ajax({
url: BASE + "/admin/user/test",
type: 'POST',
data: {type:type, id:id},
headers: { 'X-XSRF-TOKEN' : $_token },
success: function(data){
// Success...
console.log(data);
location.reload();
}
});
控制器操作,
public function getuser()
{
Session::flash('message', 'This is a message!');
Session::flash('alert-class', 'alert-danger');
exit;
}
进入视图我有这样的代码,
@if(Session::has('message'))
<p class="alert {{ Session::get('alert-class', 'alert-info') }}">{{ Session::get('message') }}</p>
@endif
但不适合我。有什么建议吗?
答案 0 :(得分:2)
您可以在ajax请求中刷新会话,这样就不会改变当前视图 如果你想在ajax请求之后更新当前页面,你将不得不使用javascript回调和javascript代码来执行此操作。
请阅读this post有关客户端和服务器端脚本之间的区别。
<强>更新强>
您永远不会收到ajax请求中设置的闪存值。闪烁的会话变量仅持续一个请求。因此,当操作返回并且输出发送回ajax请求时,闪烁的变量将被清除。
解决此问题的最佳方法是不使用ajax或使用实际的会话变量并手动清除它们。
答案 1 :(得分:0)
我发现这个问题处于完全相同的情况。不过我认为在执行ajax请求后我找到了显示flash masseges的解决方案。解决方案是使用
return back ()
或
return redirect()
我已尝试将变量写入会话然后将其删除 - 它可以工作,但它不是理想的解决方案。我尝试使用Session :: reflush - 它对我不起作用。
所以我的工作代码如下所示:
在我看来:
<li class="delete">
<a href="javascript:checkDelete({{$classified>id}});">@lang('Delete')</a>
</li>
<script>
function checkDelete(id) {
if (confirm('Are you sure you want to delete this classified?')) {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: "DELETE",
url: '/classified/' + id,
success: function(result) {
location.reload();
}
});
}
}
</script>
然后在我的控制器中
flash(__('Your classified was removed'))->warning()->important();
if (request()->expectsJson()) {
return response(['status' => 'deleted']);
}
return back();
这将成功闪现您当前的观点。我在这里使用的包装是https://github.com/laracasts/flash 我希望它可以帮助别人!