2016-06-06 46 views
0

我有這個表的鏈接,刪除檢查更迭刪除

@foreach ($tasks as $task) 
     <tr> 
      <td>{{$task->id}}</td> 
      <td>{{$task->name}}</td> 
      <td><a href="javascript:void(0)" onclick="eliminar({{$task->id}})" id="borrar_{{$task->id}}" name="borrar_{{$task->id}}" class="btn btn-danger">Eliminar</a></td> 
     </tr> 
    @endforeach 

和JavaScript代碼,它做了一份請願書,破壞控制器

function eliminar(id){ 
    var _token = $('meta[name="_token"]').attr('content'); 
    $.ajax({ 

      type: "DELETE", 
      url: "task/"+id, 
      data: { _token : _token}, 
      success: function (data) { 
       $("#borrar_"+id).closest('tr').fadeOut(); 
      }, 
      error: function (data) { 
       alert('No se pudo eliminar el resgistro'); 
      } 
    }); 
} 

控制器的方法

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Task; 

class TaskController extends Controller 
{ 
    . 
    . 
    . 

/** 
* Remove the specified resource from storage. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function destroy($id) 
{ 
    Task::destroy($id); 
} 
} 

當按鈕被點擊時,他的父錶行淡出,但我認爲這不是d的最佳方式它。我怎麼可以檢查是否Task::destroy($id)有人成功地或不發送更迭O錯誤響應Ajax請求

回答

0

在你的控制器:

public function destroy($id) 
{ 
    $deleted = Task::destroy($id); 
    return $deleted ? 'deleted' : 'error'; 
} 

在您的JS:

success: function (data) { 
    if(data === 'deleted'){ 
     $("#borrar_"+id).closest('tr').fadeOut(); 
    }else{ 
     alert('No se pudo eliminar el resgistro'); 
    } 
}, 

另一個方法我覺得有用的是使用findOrFail來獲取模型,所以它返回一個404如果找不到模型,並且ajax進入錯誤響應,如果發現模型,delete方法應該總是返回true,所以:

public function destroy($id) 
{ 
    $task = Task::findOrFail($id); 
    return $task->delete(); // will return true 
} 
+0

即使銷燬操作無法完成,'已刪除'字符串也不會被返回? – AFS

+0

是的,你是對的,我編輯 – Alessandro