2013-09-24 36 views
0

爲什麼會出現這種情況,我完全不解這個問題,我一直在搞這個工作幾個小時,我要瘋了!我試圖在複選框打開或關閉時更新我的​​數據庫。如果我所調用的PHP函數爲空,但是在添加PHP時失敗,則成功響應將起作用。注意我在Laravel 3上,我嘗試啓用或禁用CSRF篩選,但沒有運氣。AJAX僅在PHP函數爲空時拋出錯誤500

我的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

'公共職能post_update(){'應該'功能post_update(){'我相信。如果只是一個類中的函數,你只能使用public。這將導致腳本的解析錯誤和500錯誤。 – Jasper

+0

修復後,它可以與公共或不公開。然而,我不確定這種差異。 – veksen

回答

1

data應該是這樣的

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

的$就方法將車對象e的介紹和傳播。

+0

謝謝:)很大的幫助,但不是我最後的問題。與提琴手玩,可以看到服務器的錯誤信息,有關於我的函數缺少的參數,然後不得不攪亂的JS和HTML獲取獨特的名稱,因爲數據庫將更新,但它不會選擇正確的行,刪除隱藏的領域並使用html5數據,而我的第一個工作的AJAX,耶! – veksen

2

爲了也許可以幫助某人,因爲這是我第一次工作的AJAX,我將解釋我是如何工作的,以及提供工作代碼。我不是說這是做這件事的最好方法,所以如果有人有他們的話要說,不要猶豫:)

有多個問題,從Javascript不一致性返回我需要的數據庫行ID更新,PHP函數,以及我抓取POST數據的方式。

爲了讓它起作用,我在Fiddler上玩過,檢索到Laravel向我拋出的錯誤消息。我可以從那裏調試:)

我的工作代碼爲:

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'); 
      } 

     } 
    }); 

}); 

PHP

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)); 
} 

和我的HTML(刀片模板來自Laravel,其中{{}}括號僅僅是echo的,而@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