在 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 中动态输入字段的验证

使用 AJAX 在 Laravel 5.3 中删除记录

在 Laravel 4 的 .find jquery 行中使用辅助函数

我的 Jquery 文件在 laravel 中找不到控制器 [关闭]

laravel 路由 css 和 js 脚本

如何在laravel中删除公共文件夹