2016-07-28 2 views
0

국가 별 정보를 업데이트하는 모달이 있습니다. Laravel 패치 AJAX

// Partial code of the modal 
<div id="EditModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times; </button> 
       <h4 class="modal-title" id="myModalLabel">Edit <label id="EntityType"></label></h4> 
      </div> 

      <div class="modal-body"> 
       <div class="row"> 
        @yield('EditModalBody') 
       </div> 
      </div> 
      <div class="modal-footer" style="text-align: center"> 
       {{ Form::submit('Save', ['class' => 'btn btn-success', 'id' => 'editBtn']) }} 
       <button type="button" class="btn btn-danger" data-dismiss="modal">Cancel</button> 
       {!! Form::close() !!} 
      </div> 
     </div> 
    </div> 
</div> 

나는 어떤 오류가 있는지, 모달 가까이하지 않습니다 및 메세지 오류가 각 입력 필드 아래에 표시되도록, AJAX와이를 구현하기 위해 노력하고있어.

내 JS입니다 :

<script type="text/javascript"> 
$("#EditModal").submit(function (e) { 

    e.preventDefault(); 

    var selector = $(this); 

    $.ajax({ 
     type: 'PATCH', 
     dataType: 'json', 
     url: selector.attr("action"), 
     data: selector.serialize(), 

     success: function (data) { 
      if (data.success) { 
       alert('go go go'); 
      } else { 
       // for debugging 
       alert('data'); 

      } 
     }, 
     error: function (xhr, textStatus, thrownError) { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    }); 
}); 

내가 이런 "ressource"로 내 컨트롤러를 선언하지만, 오류를 "405 방법은 허용되지 않습니다"점점 오전 :

Route::resource('country', 'CountryController', 
      ['except' => ['show']]); 

내가 php artisan route:list을하면 패치 경로가 선언 된 것을 볼 수 있습니다.

아이디어가 있으십니까?

편집 1 :

public function update($id, Request $request) 
    { 
     $validator = Validator::make($request->all(), $this->getRules(), $this->getMesssages()); 

     if ($validator->fails()) { 
      $json = new stdClass(); 
      $json->success = false; 
      $json->errors = $Validator->errors(); 
     } 
     else { 
      $json = new stdClass(); 
      $json->success = true; 
     } 

     return Response::json($json); 

편집 2 :

그래서 내 모달이 <input type="hidden" name="_token" value="{{{ csrf_token() }}}"/>을 추가하고 나는 더 이상 405 오류가 발생하지

이 (의 일부) 내 컨트롤러 . 나는 여전히 내 JS의 "오류"부분을 얻는다. (단지 상태 0이된다.)

+0

selector.attr ("action")의 모양을 알 수 있습니까? –

+0

/country/idOrSomething –

+0

과 같아야합니다. 그것은 국가/id' –

답변

0

type: 'PATCH'은 HTTP 메서드에 존재하지 않으므로 Laravel에서 인식하지 못한다.
이 시도 :

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: selector.attr("action"), 
    data: { 
     '_method': 'PATCH', 
     'data': selector.serialize(), 
    }, 

당신은 _method 포스트 데이터로 PATCH 방법을 제출해야합니다.


컨트롤러 기능이 잘못되었습니다. 올바른 순서는

public function update($id, Request $request) 

OT

public function update(Request $request, $id) 

대신

될 것이다 : 나는 이미 당신에게이 문제에 대한 힌트를주는 Laravel 문서에 대한 추가 제출 있지만 노 코멘트로 거부 .

+0

좋아 보인다! 하지만 여전히 "405 Method ..."가 나타납니다. –

+0

올바른 경로/URL을 사용 하시겠습니까? post 데이터'_method = PATCH'를 갖는'post' 요청은'update' 라우트에 의해 받아 들여 져야합니다. - https://laravel.com/docs/5.2/controllers#restful-resource-controllers – Kovah

+0

컨트롤러에서'dd ($ request);'를 수행하면 메소드가 정확하게 PATCH로 실행되고 있음을 알 수 있습니다. 나는 혼란 스럽다 ... –