在 Laravel 和 jquery 中删除文件的问题
Posted
技术标签:
【中文标题】在 Laravel 和 jquery 中删除文件的问题【英文标题】:Problem with deleting files in Laravel and jquery 【发布时间】:2019-10-12 08:00:41 【问题描述】:我是 Laravel 和 JQuery 的初学者。
我有这个代码:
<ul>
<li class="file-id-46">- <a
href="http://test.test/upload/other/1c186a1229c8c502c9bae2794b52a6f0.pdf"
target="_blank">upload/other/1c186a1229c8c502c9bae2794b52a6f0.pdf</a>
<a href="#" class="red removeThisFile"
id="46">[delete file]</a>
</li>
<li class="file-id-47">- <a
href="http://test.test/upload/other/65b13b47f09fc785d901e43e7864bab2.pdf"
target="_blank">upload/other/65b13b47f09fc785d901e43e7864bab2.pdf</a>
<a href="#" class="red removeThisFile"
id="47">[delete file]</a>
</li>
<li class="file-id-48">- <a
href="http://test.test/upload/other/19846324513791f79013fb8e5a7854d8.pdf"
target="_blank">upload/other/19846324513791f79013fb8e5a7854d8.pdf</a>
<a href="#" class="red removeThisFile"
id="48">[delete file]</a>
</li>
<li class="file-id-49">- <a
href="http://test.test/upload/other/fca69b7c02ae223cd167202368d3a555.pdf"
target="_blank">upload/other/fca69b7c02ae223cd167202368d3a555.pdf</a>
<a href="#" class="red removeThisFile"
id="49">[delete file]</a>
</li>
<li class="file-id-50">- <a
href="http://test.test/upload/other/2a1f88cd9f223a423a29594be3d8ce7a.pdf"
target="_blank">upload/other/2a1f88cd9f223a423a29594be3d8ce7a.pdf</a>
<a href="#" class="red removeThisFile"
id="50">[delete file]</a>
</li>
<li class="file-id-51">- <a
href="http://test.test/upload/other/dbe585a9716bd417437be6b0d5695a6a.pdf"
target="_blank">upload/other/dbe585a9716bd417437be6b0d5695a6a.pdf</a>
<a href="#" class="red removeThisFile"
id="51">[delete file]</a>
</li>
<li class="file-id-52">- <a
href="http://test.test/upload/other/585b8aa2cfd6a871eb3ed0e1c6d5e2b9.pdf"
target="_blank">upload/other/585b8aa2cfd6a871eb3ed0e1c6d5e2b9.pdf</a>
<a href="#" class="red removeThisFile"
id="52">[delete file]</a>
</li>
</ul>
$(".removeThisFile").click(function ()
var id = $(this).attr("id");
$('.file-id-' + id).hide();
$.ajax(
url: 'http://test.test/psCMS/removeOtherFile?id=52',
type: 'get',
dataType: 'json',
_token: $('meta[name="_token"]').attr('content'),
headers:
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
,
cache: false,
success: function (response)
$(this).hide();
);
一般来说,jquery 会正确地向 php (Laravel) 发送查询。 删除文件时会出现问题。第一个文件被正确删除。下一个文件不能睡觉。 我怀疑删除前一个文件后我的 X-CSRF-TOKEN 令牌无效。
我该如何解决这个问题?
【问题讨论】:
什么是'_token'?是不是简单的 laravel api token? 【参考方案1】:在js代码中:
$(".removeThisFile").click(function ()
var id = $(this).attr("id");
$('.file-id-' + id).hide();
$.ajax(
url: 'http://test.test/psCMS/removeOtherFile/'+id,
type: 'get',
dataType: 'json',
cache: false,
success: function (response)
$(this).hide();
);
);
在路由文件(web.php)中:
Route::get('/psCMS/removeOtherFile/id', 'YourController@removeOtherFile');
在控制器中:
public function removeOtherFile($id)
$my_id = $id;
// here is your id
【讨论】:
【参考方案2】:您可能会遇到一些 x-csrf 问题,因为这看起来不像我以前看到的那样(尽管它可能工作得很好)。在表单顶部使用 @csrf
并在 ajax 设置方法中调用通用标题可能会更好。
$.ajaxSetup(
headers:
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
);
但是,要直接回答您的问题,我相信这个问题要容易得多 - 我认为这是一个错字。您已经对 id 进行了硬编码。尝试更改此行:
url: 'http://test.test/psCMS/removeOtherFile?id=52',
到:
url: 'http://test.test/psCMS/removeOtherFile?id='+id, // <--- note the variable
【讨论】:
以上是关于在 Laravel 和 jquery 中删除文件的问题的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 4 的 .find jquery 行中使用辅助函数