あなたがここに行う必要があるいくつかあります:
$('li').on('click', function(e){
$.ajax({
url: 'api/tasks/update/'+$(this).data('id')+'/'+$(this).data('completed'),
method: 'GET'
})
});
私はlaravelを使用しておりますので、これは私のルートがあります:
まず、n個
<li data-id='{!! $task->id !!}' data-completed='{{ $task->completed }}'>
第二に、あなたのビューを更新できるように、あなたが更新されたタスクを返す必要があります:あなたはすでにあなたのビュー部分を簡略化することができるように、データベース内の0/1を保存している場合、あなたのif文をEED :次に
Route::get('api/tasks/update/{id}/{completed}', function($id, $completed) {
$task = App\Task::find($id);
$task->completed = $completed;
$task->save();
return response()->json($task);
});
、更新task
が返されたとき、あなたはあなたのリストを更新できるように、あなたのAJAX呼び出しを更新:私もどうなる
$('li').on('click', function(e){
var completed = (!$(this).data('completed') ? 1 : 0);
$.ajax({
url: 'api/tasks/update/'+$(this).data('id')+'/'+$(this).data('completed'),
method: 'GET',
success: function(data) {
$(this).data('completed', data.completed);
},
})
});
何かがあなたの経路Aを更新しています、
PHP
Route::post('api/tasks/update/{id}', function(Request $request, $id) {
$task = App\Task::find($id);
$completed = $request->input('completed');
$task->completed = $completed;
$task->save();
return response()->json($task);
});
JS
$('li').on('click', function(e){
$.ajax({
url: 'api/tasks/update/'+$(this).data('id'),
data: {completed: (!$(this).data('completed') ? 1 : 0)},
method: 'POST',
success: function(data) {
$(this).data('completed', data.completed);
},
})
});
おかげで一つのことを除いて、魔法のように動作します:ND AJAXは、これはあなたがデータを更新しているときのためにちょうど良い練習があるとして、
POST
の呼び出し。上記のように、データベースは更新されません。なぜなら、 'completed'の逆は、データベースから取得した値ではなく、ajax呼び出しで渡されるべきだからです。私は 'data:{completed:!$(this)} .data( 'completed')} 'を試しましたが、感嘆符で渡される値は' true'か 'false'です。このようにデータベースの値を '0'または' 1'に設定しないでください。助言がありますか? – Hardist私は真理値/偽値を自分の1/0値に変換するために三項式を追加しました。コントローラーでもこれを行うことができますが、正しい値をコントローラーに送るのではなく、コントローラーに正しい値を送る方が理にかなっています。 – Samsquanch
ありがとう、私は、PHPで三分の一とすべてを理解するが、それはJavaScriptになると、私は失われています。私はそれをよりよく理解するためにいくつかのチュートリアルに従う必要があります:) – Hardist