Ajax、重定向和DELETE
Ajax, redirect and DELETE
为了遵守Laravels的约定,我希望我的用户在使用destroy路由时发出DELETE请求。
为了避免在每个删除链接上设置繁琐的表单,我设计了这段jQuery代码,它将任何带有method="delete"
属性的a
标记转换为delete请求:
$(function() {
$("a[method='delete']").on('click', function(event) {
event.preventDefault();
target = this.getAttribute('href')
request = new XMLHttpRequest()
request.open('delete', target, false);
request.send();
});
});
这段代码几乎完成了任务。但是,当我的控制器在destroy方法中处理DELETE请求时,它们应该重定向用户。例如,如果他破坏了一个资源,他应该被重定向到资源索引。
我正试图找到一种干净的方式来做到这一点,而不用响应一个特殊的JSON体,但只是使用一个标准的303
重定向。
你知道怎么做吗?
我不喜欢用Javascript来做这件事。相反,我使用Form
宏为我的RESTful资源插入删除按钮。(我假设你有一个别名销毁方法,或使用Laravel的Route::resource()
没有前缀,否则相应地调整。)
Form::macro('delete', function($resource, $id) {
$form_parameters = array(
'method' => "DELETE",
'url' => URL::route("$resource.destroy", $id),
);
return Form::open($form_parameters)
. Form::submit('Delete')
. Form::close();
});
然后,对于刀片模板,我可以这样写:
{{ Form::delete('post', 1) }}
最后,在假设的post
控制器的destroy方法中正常进行303重定向。
return Redirect::to(URL::route('post.index'), 303);
我找到了一个可行的解决方案,它使JavaScript函数有点脏,但保持HTML的其余部分干净。它的工作原理是创建一个带有post请求和隐藏方法属性的虚拟表单并提交它,从而处理请求并重定向用户。
请记住,在提交表单之前必须将表单附加到DOM,否则一些浏览器会忽略表单提交。
$(function() {
$("a[method='delete']").on('click', function(event) {
event.preventDefault();
target = this.getAttribute('href')
form_string = "<form method='"POST'" action='"" + target + "'" accept-charset='"UTF-8'"><input name='"_method'" type='"hidden'" value='"DELETE'"></form>"
form = $(form_string)
form.appendTo('body');
form.submit();
});
});
相关文章:
- 通过javascript重定向html传递php变量
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- 使用angular重定向到html页面
- 如何在chrome扩展中重定向到html页面
- 无法从jquery Mobile导航栏重定向到另一个页面
- ng视图外的链接重定向到ng视图内的页面
- 在phonegap应用程序内部重定向不起作用
- CORS-重定向到第二个GET正在接收的页面
- AJAX不会在文件上传后重定向到网页-POST方法
- 重定向时角度刷新浏览器
- 通过链接重定向不;我不在jstree中工作
- 根据select选项元素将表单重定向到不同的URL
- 通过JQuery重定向到另一个页面
- 重定向到“父窗口”
- 重定向iFrame中的父URL
- PHP-如何重定向到同一页面并更改DOM's
- chrome.tabs.update() 重定向到 'chrome-extension://invalid/'
- 我们如何在不更改url的情况下使用锚点点击从一个页面重定向到另一个页面
- Ajax、重定向和DELETE
- AJAX DELETE方法重定向不起作用