2013-09-24 3 views
0

저는 왜 이런 일이 발생했는지 완전히 당혹 스럽습니다. 몇 시간 동안이 작업을 망쳤으며, 나는 crazyyy가 될 것입니다! 체크 박스가 켜지거나 꺼져있을 때 DB를 업데이트하려고합니다. 성공 응답은 PHP 함수를 호출 할 때 비어 있지만 PHP를 추가 할 때마다 실패합니다. 참고 Laravel 3을 사용 중입니다. CSRF 필터링을 활성화하거나 비활성화하려고 시도했습니다.AJAX는 PHP 함수가 비어있을 때만 오류 500을 throw합니다.

내 JS :

$seenTD = $('td.seen_by_user'); 
$seenTD.each(function() { 
    $this = $(this); 
    var $seenLabel = $this.find('label'); 
    var $seenInput = $this.find(':checkbox'); 

    $seenInput.change(function() { 

     var _csrf = $('input[name="csrf_token"]').val(); 
     var chkName = $(this).attr('name'); 
     var checkVal = $(':checkbox[name='+chkName+']').prop('checked'); //true or false 
     var id = $this.find('input[name="reminder_id"]').val(); 
     $.ajax({ 
      url: 'update', 
      type: 'POST', 
      data: 'seen='+checkVal+'&reminder_id='+id+'&csrf_token='+_csrf, 

      success: function(data) { 
       console.log(data); 

       if($seenInput.is(':checked')) { 
        $seenLabel.removeClass('unchecked').addClass('checked'); 
        $seenLabel.find('span').text('Oui'); 
       } 
       else { 
        $seenLabel.removeClass('checked').addClass('unchecked'); 
        $seenLabel.find('span').text('Non'); 
       } 

      } 
     }); 

    }); 
}); 

내 PHP

public function post_update() { 

    $request = Request::instance(); 
    $content = $request->getContent(); 

    $id = $content['id']; 
    $seen = $content['seen']; 

    if($seen == 'true') { 
     $seen = 1; 
    } 
    if($seen == 'false') { 
     $seen = 0; 
    } 

    DB::table('reminders')->where('id', '=', $id)->update(
     array(
      'seen_by_user' => $seen 
     )); 
} 
+3

'public function post_update() {'나는 post_update() {믿어야 만합니다. 클래스 내의 함수 인 경우 public 만 사용합니다. 이렇게하면 스크립트의 구문 분석 오류와 500 오류가 발생합니다. – Jasper

+0

그것을 고친 후에, 그것은 공개적으로 또는 공개적으로 작동합니다. 나는 그 차이점을 확신 할 수 없다. – veksen

답변

1

data

data: {"seen": checkVal, "reminder_id": id, "csrf_token": _csrf}, 

$ 아약스 방법은 걸릴 것입니다 자동차와 같은 물체해야한다 e를 제공합니다.

+0

감사합니다 :) 큰 도움이되었지만 내 마지막 문제는 아니 었습니다. 피들러와 함께 연주하고 서버 오류 메시지를 볼 수있는 내 함수에 대한 인수가 누락되었습니다. db가 업데이트 될 것이기 때문에 고유 이름을 얻기 위해 js와 html을 혼란시켜야했지만 올바른 행을 선택하지 않았고 숨겨진 필드를 삭제했습니다. 대신 html5 데이터를 사용했습니다. 제 첫 번째 작업 인 AJAX입니다. – veksen

2

어쩌면 다른 사람을 돕기 위해, 이것이 내가 AJAX로 작업 한 첫 번째 작업이기 때문에 작동 코드를 제공하는 방법과 작동 코드를 제공하는 방법을 설명 할 것입니다. 나는 이것이 최선의 방법이라고 주장하지 않는다. 누구나 할 말이있다면, 주저하지 말고.

데이터베이스에 필요한 행 ID를 반환하는 Javascript 비 일관성 문제가 여러 개 있습니다. 업데이트, PHP 함수 및 POST 데이터를 잡는 방법에 대해 설명합니다.

작동 시키려면 Lolavel이 내게 던지는 오류 메시지를 검색 한 Fiddler에서 재생했습니다. 그리고 나는 거기에서 디버깅 할 수 있습니다 :

내 작업 코드는 다음과 같습니다

JS :

$('td.seen_by_user :checkbox').change(function() { 

    $this = $(this); 
    var $label = $this.siblings('label'); 
    var id = $this.attr('data-id'); 
    var _csrf = $this.siblings('input[name="csrf_token"]').val(); 
    var value = $this.prop('checked'); 

    $.ajax({ 
     url: 'update', 
     type: 'POST', 
     data: {"seen_by_user": value, "id": id, "csrf_token": _csrf}, 

     success: function(data) { 

      if($this.is(':checked')) { 
       $label.removeClass('unchecked').addClass('checked'); 
       $label.find('span').text('Oui'); 
      } 
      else { 
       $label.removeClass('checked').addClass('unchecked'); 
       $label.find('span').text('Non'); 
      } 

     } 
    }); 

}); 

function post_update() { 
    $id = $_POST['id']; 
    $seen = $_POST['seen_by_user']; 

    if($seen == 'true') { 
     $seen = 1; 
    } 
    if($seen == 'false') { 
     $seen = 0; 
    } 

    $update_reminder = DB::table('reminders')->where('id', '=', $id)->update(
     array('seen_by_user' => $seen)); 
} 

PHP 그리고 내 HTML (블레이드 템플릿 Laravel에서 {{}} 대괄호는 단순히 에코입니다. @foreach는 a)

@foreach ($reminders as $reminder) 
    ... 
    <td class="seen_by_user"> 
     <form class="ajax" action="update" method="POST"> 
      {{ Form::token() }} 
      {{ Form::checkbox('seen_'.$reminder->id, 1, $reminder->seen_by_user, array('id' => 'seen_'.$reminder->id, 'data-id' => $reminder->id)) }} 
      <label class="seen {{ ($reminder->seen_by_user == 1 ? 'checked' : 'unchecked') }}"for="{{ 'seen_'.$reminder->id }}"><i class="read"></i><span>{{ ($reminder->seen_by_user == 1 ? 'Oui' : 'Non') }}</span></label> 
     </form> 
    </td> 
    ... 
@endforeach 
+0

잘 작동했으면 좋았어! –

+0

특별히 문제가 해결 된 이유는 무엇입니까? 변경 사항을 게시 한 경우 훨씬 더 도움이됩니다. – Jasper

관련 문제