我有一个用户可以用来输入Trips字段的模态。其中一个字段是Multiple Photo上传输入字段。当用户编辑旅行时,所有的照片都会显示在那个模式中。用户可以在模态中一次删除一张照片。
问题是当我点击那个按钮删除照片时,它会将我重定向回那个页面,但模态消失了。这有点烦人,尤其是当你想删除另一张照片或其他东西时。
如何避免在重定向后关闭模态?
这是我的模态(缩短):
<div class="modal fade" id="siteMessage" tabindex="-1" role="dialog" aria-labelledby="siteMessage">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
<h4 class="modal-title" id="title">Some Trip Name Here</h4>
</div>
<div class="modal-body" id="body">
{{ Form::model( $trip, ['route'=>['user.listings.trips.create',$listing->slug], 'method'=>'POST', 'id' => 'trip_form', 'files' => true ]) }}
<!-- Add Trip Photos -->
<div class="form-group">
<label for="photos[]" class="control-label">Photos</label>
<input class="form-control" name="photos[]" type="file" id="photos[]">
</div>
<div class="col-md-12 no-padding">
@foreach( $trip->photos as $key => $photo )
<div class="col-xs-6 col-sm-6 col-md-4">
<img src="{{$photo->url}}" alt="{{$photo->name}}" class="img-responsive">
<a href="{{ route('user.listings.trip.photo.destroy',[$listing->slug,$photo->id]) }}" class="pull-right">
<i class="fa fa-trash" style="color: red;"></i>
</a>
</div>
@endforeach
</div>
{{ Form::close() }}
</div>
</div>
</div>
</div>
这是我的删除方法:
public function deletePhoto(Request $request, $id) {
Photo::where('id', $id)->first()->delete();
return redirect()->back();
}
这是我删除照片时的请求URL
http://mywebsite.com/listings/expedition-wild-2/trips/photos/2456/destroy
您应该使用Javascript和AJAX调用来防止页面重新加载。当页面重新加载时(在您使用return redirect()->back()
的情况下),它将使页面具有其原始状态,其中模式尚未打开。
这个想法是,用javascript,当你点击"删除照片",它会运行一个http请求到你的服务器路由/listings/expedition-wild-2/trips/photos/2456/destroy
,服务器将尝试删除照片并发送响应回来。然后你的javascript代码将接收响应并按照你喜欢的方式处理它。例如,向用户显示一条消息"照片已删除!"这样,页面将永远不会重新加载,你的模式将保持打开状态。
你的delete方法看起来更像这样:
public function deletePhoto(Request $request, $id) {
Photo::where('id', $id)->first()->delete();
return 'Photo Deleted.';
}
看看这里更好的Laravel HTTP响应:https://laravel.com/docs/5.0/responses
在您的HTML中,您仍然可以使用一个链接,就像您已经有,删除操作,甚至只是一个按钮元素代替。无论哪种方式,其思路都是使用javascript监听被点击的事件,并调用一个函数,该函数将运行http请求,而无需重新加载页面。当使用链接时,你必须编写一些javascript代码来阻止页面重新加载,而使用按钮时,则不需要这样做。根据您的应用程序选择更适合您的。一个使用按钮的快速html示例是:
<button onclick="myDeletePhotoFunction()">Delete Photo</button>
然后在javascript中,myDeletePhotoFunction
将是一个函数,将处理http调用到服务器(AJAX),使用您的删除照片路由。像这样:
function myDeletePhotoFunction() {
//run ajax call to /listings/expedition-wild-2/trips/photos/2456/destroy
//I recommend using a library for this, for ex. jQuery
//when completed, show message to user
//ex.: alert('photo deleted'); or alert(ajaxResponse);
}
这应该给你指明正确的方向。
阅读更多关于Javascript AJAX在这里:http://www.w3schools.com/ajax/default.asp
使用jQuery: http://www.w3schools.com/jquery/jquery_ajax_intro.asp