我正在尝试访问ajax请求中的laravel flash消息。我搜索了它有一些可用的解决方案,但我想在不重新加载页面的情况下显示它们。
我正在尝试的内容:
在我的控制器中,我正在设置Flash消息
Session::flash('success', 'Record has been inserted successfully');
和
return response()->json([
'success' => 'ok' // for status 200
]);
在Ajax中
success: function(data){
if(data.success){
// reload the current page
window.location.href = 'http://localhost/Framework/augLaravel3/public/index.php/user/add';
}
}
在视图中
@if (Session::has("success"))
{{ Session::get("success") }}
@endif
上面的代码工作正常,我只想删除重新加载步骤,因为如果我通过ajax显示消息(没有页面重新加载),我认为它对于复杂或大型应用程序会更方便。但是因为我是laravel的新手所以我不知道我可以将session::flash
转换为json吗?
任何人都可以指导我这个,它可能吗?如果我们在ajax中访问session::flash
,这将是正确的方法吗?如果有人指导我,我很感激。谢谢。
答案 0 :(得分:3)
而不是像@Abbbas khan建议的那样使用服务器的响应来硬编码html,我宁愿返回flash消息的子视图,并且可以在任何页面上重用该子视图。
<强> 1。创建您的Flash消息子视图: 创建partials / flash-messages.blade.php
@if( Session::has("success") )
<div class="alert alert-success alert-block" role="alert">
<button class="close" data-dismiss="alert"></button>
{{ Session::get("success") }}
</div>
@endif
//Bonus: you can also use this subview for your error, warning, or info messages
@if( Session::has("error") )
<div class="alert alert-danger alert-block" role="alert">
<button class="close" data-dismiss="alert"></button>
{{ Session::get("error") }}
</div>
@endif
<强> 2。在你的控制器中: 定义所需的成功消息并返回flash消息子视图
use Session;
use View;
Session::flash('success', 'File has been uploaded successfully!');
return View::make('partials/flash-messages');
第3。在您的主视图中: 在你想要jquery的位置放置一个空div来附加你的flash消息
<div class="flash-message"></div>
<强> 4。在你的ajax代码中: 将您的子视图作为html响应传递并将其附加到上面定义的div
$.ajax({
...
dataType: 'html', //Optional: type of data returned from server
success: function(data) {
$('div.flash-message').html(data);
},
...
});
<强> 5。为什么我喜欢这种方法: 使用此服务器端方法,您可以准备好在任何页面上重用您的Flash消息。您的ajax代码也得到了简化,您也可以在另一个页面上重复使用它。您需要自定义的唯一内容是您在控制器中整齐定义的消息内容!真棒!
答案 1 :(得分:0)
if ($Validator->fails()) {
return Response::json([
'message'=>'you have not inserted',
'error' =>$Validator->errors()->toArray()
]);
}
else{
$this->flight->name = $request->name;
$this->flight->detail = $request->detail;
$this->flight->save();
return Response::json([
'message'=>'you have inserted']);
}
in ajax as
success: function(data){
if(data.error){
$('#main').html('<div class="alert alert-danger col-ssm-12" >' + data.message + '</div>');
$('#nameid').html('<div class="alert alert-danger col-sm-12" >' + data.error.name + '</div>');
$('#detailid').html('<div class="alert alert-danger col-sm-12">' + data.error.detail + '</div>');
// location.reload('/');
}
else{
$('#main').html('<div class="alert alert-info col-ssm-12" >' + data.message + '</div>');
}
}