2017-03-02 165 views
0

我的動物輪廓(ID卡)的列表。當我以管理員身份登錄後點擊其中一個人時,我訪問了一個頁面,其中包含更多詳細信息和多張圖片。在那裏,我可以編輯動物配置文件(POST方法),並且我還希望能夠通過單擊它來刪除圖片。我試圖使用Ajax來做到這一點,但我無法完成該過程。到目前爲止我的代碼:阿賈克斯Laravel 5.3:GET方法不被允許(405錯誤)

Route::get('/edition-adoption/{animal}', '[email protected]') 
    ->where('animal', '[0-9]+'); 

Route::post('/edition-adoption/{animal}', '[email protected]'); 

Route::get('/edition-adoption/{folder}/{file}/delete', ['uses' => '[email protected]', 'as' => 'delete']); 

查看:

<form role="form" method="POST" enctype="multipart/form-data" action="{{ url('/edition-adoption/{animal}') }} "> 
     {{ csrf_field() }} 

/*several fields to update*/ 

      <div class="col-xs-11"> 
       <?php 
        edit_profile($animal->id); 
       ?> 
       <script src={{asset("/js/imageSrc.js")}}></script> 
      </div> 
    /*other fields & submit button*/ </form> 

控制器:

public function editAdoption (Animal $animal) { 
    return view('administration/edition-adoption',['animal' => $animal]); 
} 

public function deletePicture($file, $folder) { 
    $path = public_path('js/slider_images/Adoption/Profile/'.$folder.'/'.$file); 
    unlink($path); 
} 

public function updateAdoption (Request $request) { 
    /*several update requests*/ 
} 

助手:

function edit_profile($current_id) { 


      $paths = File::Files('js/slider_images/Adoption/Profile/'.$current_id); 

     if (count($paths)==0) { 
     echo 
     "<p>Aucune image</p>"; 
     }  
      else { 
     foreach($paths as $path) 
       { 
       $filesinfo[] = pathinfo($path); 
       } 

       foreach ($filesinfo as $file) { 

       $current_basename = $file['basename']; 

       echo 
       "<img onclick='getImgSrc(this)' width='200px' src='".asset("/js/slider_images/Adoption/Profile/".$current_id."/".$current_basename)."'/>&nbsp&nbsp"; 
       } 
     } 
} 

imageSrc.js(阿賈克斯):

function getImgSrc(param){ 

var imgSrc = $(param).attr("src"); 
var myarr = imgSrc.split("/"); 
var arrlen = myarr.length; 
var id = myarr[arrlen-2]; 
var myvar = myarr[arrlen-1]; 
var result = confirm("Voulez-vous vraiment supprimer cette image ? Cette action est irréversible."); 

if (result) { 

    $.ajax({ 
      url: 'delete', 
      headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      data: {'folder': id, 'file' : myvar}, 
      success: function (response) { 
      alert('Image supprimée !'); 
      }, 
      error: function() { 
      alert('Erreur. Veuillez réessayer.'); 
      } 
     }); 
    } 
} 

確認警報工作正常,但是當我點擊確定,但以下情況例外出現:

GET http://localhost/sites/(...)/public/edition-adoption/delete?folder=foldername&file=filename.jpg 405(不允許的方法)

任何想法(S)關於如何解決這個問題?

+0

嘗試通過完整的相對URL在你的Ajax。你的路由是'/ edition-adoption/{folder}/{file}/delete',但是它正在訪問'/ edition-adoption/delete?' – aynber

+0

@aynber謝謝你的回答。我嘗試使用'url:id +'/'+ myvar +'/ delete','但結果是一樣的... – Mefimefi

+0

檢查你的'工匠路線:list | grep版本採用| grep delete'說。 –

回答

0

終於解決了這多虧了朋友。它看起來在控制器中的參數順序($folder,$file)非常重要。他們在對URL /路由(/edition-adoption/{folder}/{file}/delete)預期的順序,但它們的路徑被交換(我希望http://localhost/sites/(...)/public/edition-adoption/foldern‌​ame/filename.jpg/del‌​ete,並得到http://localhost/sites/(...)/public/edition-adoption/filen‌​ame.jpg/foldername/del‌​ete;這說明404錯誤)。我將public function deletePicture($file, $folder)更改爲public function deletePicture($folder, $file),現在它工作正常!我還在Ajax成功中添加了$(param).hide();以隱藏已刪除的圖片,而不必刷新頁面。無論如何,感謝@aynber和@AlexBlex的建議!