Javascript 拉威尔+;发布后jquery对话框重定向(&x2B;fullcalendar)
我有一个jquery对话框,当单击fullcalendar实例中的单个事件时,它的“事件”会动态更改,如下所示:Javascript 拉威尔+;发布后jquery对话框重定向(&x2B;fullcalendar),javascript,php,jquery,ajax,laravel,Javascript,Php,Jquery,Ajax,Laravel,我有一个jquery对话框,当单击fullcalendar实例中的单个事件时,它的“事件”会动态更改,如下所示: $('#calendar').fullCalendar({ //calendar options here events: 'getlogs', eventClick: function(calEvent,
$('#calendar').fullCalendar({
//calendar options here
events: 'getlogs',
eventClick: function(calEvent, jsEvent, view) {
//POPUPCODE START
$.ajax({
url: 'getlog',
data: { id: calEvent.id},
dataType: "json",
success: function(data)
{
//set your values in the edit fields here
}
});
$('#logid').val(calEvent.id);
$("#editdeletediv").load().dialog(
{ //Set options for the dialog here
title: 'Edit/Delete log',
modal: true,
autoResize:true,
maxWidth: 600,
minWidth: 500,
buttons: {
Delete: function(){
$.ajax({
url: 'removelog',
type: "POST",
data: { id: calEvent.id },
dataType: "json"
});
},
Save: function(){
}
}
});
//POPUPCODE END
}
});
然后,我在laravel routes.php中有一个路由,它将我使用delete按钮所做的文章路由到正确的控制器,如下所示:
Route::post('removelog/','CalendarController@removeLog');
控制器中的功能如下所示:
public function removeLog(){
$id = Input::get('id');
DB::table('time_logs')->where('id', '=', $id)->delete();
}
现在,这一切都很完美,但也有一个缺点。当我单击对话框上的“删除”按钮时,它不会关闭对话框(我知道如何操作,不用担心),但当我添加功能关闭对话框时,它仍会显示我以前删除的事件。因此,我想刷新我的页面(因为当我这样做时,事件会消失,因为它们是从我的“getlogs”中呈现的,并直接从数据库中读取的),因此它将不再显示已删除的事件,我尝试了一些方法来实现这一点:
在jquery对话框中,我添加了delete按钮
window.location.reload and later location.reload
这确实会重新加载我的页面,但是,它会以某种方式中断我对删除功能的发布
在我的控制器中,我添加了:
return Redirect::route('calendar');
回到日历页面,这并没有重定向我,但帖子仍然有效,所以至少它没有破坏任何东西
我还尝试:
return Redirect::back();
我的另一篇文章创建了一个日志(这里的区别是该文章是使用表单提交创建的),这也不起作用
我想知道是否有人知道我如何在不改变太多代码的情况下用当前设置实现这一点(我花了很长时间才让一切正常工作并记录我是如何做到的,我不想重写任何内容)好的,首先尝试使用DELETE来删除请求,但这与功能性无关 在控制器中:
public function removeLog(){
$id = Input::get('id');
DB::table('time_logs')->where('id', '=', $id)->delete();
return Response::json(URL::route('calendar'), 200);
}
在Jquery中
$("#editdeletediv").load().dialog(
{ //Set options for the dialog here
title: 'Edit/Delete log',
modal: true,
autoResize:true,
maxWidth: 600,
minWidth: 500,
buttons: {
Delete: function(){
$.ajax({
url: 'removelog',
type: "POST",
data: { id: calEvent.id },
dataType: "json",
success: function(response){
location.href = response;
}
});
},
Save: function(){
}
}
});
创建一个成功:在Delete按钮上运行函数并将location.reload放在其中,我的第一个想法是因为ajax请求没有及时处理,页面在ajax请求完成之前重新加载。此外,对于删除,您应该在标题中使用DELETE而不是POST。您可能希望尝试
location.href
而不是location.reload()
。我尝试了成功:function(){location.href('calendar')}但这给了我一个内部服务器错误,说日历不存在,即使它是在我的路由中配置的。如果我使用location.reload()@JeremyC,phpI也会遇到同样的问题。在PHP中(删除后):返回Response::make(URL::route('calendar'),204);然后在javascript中的success函数中,您将在回调success中获得url:function(result){console.log(result);};我不确定结果中会包含什么,但url应该在该对象中。类似于result.data的内容,您将在日志中看到它,这给了我:“[2015-05-19 09:24:49]local.ERROR:异常'InvalidArgumentException',消息'Route[calendar]not defined'。在C:\xampp\htdocs\proofconcept\laravel\vendor\laravel\framework\src\light\Routing\UrlGenerator.php:273中”即使我在routes.php中有这样一个条目:“route::get('calendar','CalendarController@index);“啊,对。。你必须说出你的路线。路由::post('calendar',['as'=>'calendar','uses'=>'CalendarController@removeLog']);我的帖子不叫日历,这是我的get,我的帖子有效,当我从redirect调用它时,get不起作用,如果我从菜单重定向或表单提交后通过正常路径重定向,效果很好,只是在ajaxI做了所有这些之后没有,唯一的区别是现在我没有收到内部服务器错误(现在只有回复200)但是我仍然没有被重定向,success函数中的东西没有被执行(我只是试图提醒响应)你在使用什么浏览器?尝试使用window.location.href=response;而不是location.href