2017-05-28 73 views
0

私はajaxを使ってCRUD操作を実行するテーブルを持っていますが、私はajaxを初めて使っています。 jqueryデータテーブルを使用してテーブルをインタラクティブにしましたが、正しく動作しません。テーブルにデータを追加して編集することはできますが、データを並べ替えると、ページをリロードするまで、新しい/更新されたデータは消えます。DjangoでAjaxを使用してデータテーブルを更新する方法

私は問題が何であるか知っていると思いますが、私は解決できませんでした。私は単に私として成功機能にmyTable.draw('full-reset');などmyTable.ajax.reload();を追加しようとした上記で views.py

def case_list(request): 
    cases = Case.objects.filter(user=request.user).order_by('date_due') 
    return render(request, 'cases/case_list.html', {'cases': cases}) 

cases.js

$(function() { 

    /* Functions */ 

    var loadForm = function() { 
    var btn = $(this); 
    $.ajax({ 
     url: btn.attr("data-url"), 
     type: 'get', 
     dataType: 'json', 
     beforeSend: function() { 
     $("#modal-case").modal("show"); 
     }, 
     success: function (data) { 
     $("#modal-case .modal-content").html(data.html_form); 
     } 
    }); 

    }; 

    var saveForm = function() { 
    var case_formset = $(this); 
    $.ajax({ 
     url: case_formset.attr("action"), 
     data: case_formset.serialize(), 
     type: case_formset.attr("method"), 
     dataType: 'json', 
     success: function (data) { 

     if (data.form_is_valid) { 
      $("#case-table tbody").html(data.html_case_list); 
      $("#modal-case").modal("hide"); 
      myTable.draw('full-reset'); 
     } 
     else { 
      $("#modal-case .modal-content").html(data.html_form); 
     } 

     } 
    }) 

    return false; 

    }; 


    /* Binding */ 

    // Create case 
    $(".js-create-case").click(loadForm); 
    $("#modal-case").on("submit", ".js-data-create-form", saveForm); 

    // Update case 
    $("#case-table").on("click", ".js-update-case", loadForm); 
    $("#modal-case").on("submit", ".js-case-update-form", saveForm); 

    // Delete case 
    $("#case-table").on("click", ".js-delete-case", loadForm); 
    $("#modal-case").on("submit", ".js-case-delete-form", saveForm); 

}); 

するlist.html

<script type="text/javascript"> 
$(document).ready(function(){ 

    var myTable = $('#case-table').DataTable({ 
     }); 

}); 
</script> 


h1 class="page-header">Cases</h1> 

    <p> 
    <button type="button" class="btn btn-primary js-create-case" data-url="{% url 'case_create' %}"> 
     <span class="glyphicon glyphicon-plus"></span> 
     New case 
    </button> 
    </p> 

    <table class="table" id="case-table"> 
    <thead> 
     <tr> 
     <th>Date due</th> 

     <th></th> 
     </tr> 
    </thead> 
    <tbody> 
     {% for case in cases %} 
    <tr class = 'click-row'> 
    <td><a href="{% url 'edit_case' case.slug %}" ></a>{{ case.date_due }}</td> 
    <td style="width: 150px"> 
     <button type="button" 
       class="btn btn-warning btn-sm js-update-case" 
       data-url="{% url 'case_update' case.id %}"> 
     <span class="glyphicon glyphicon-pencil"></span> Edit 
     </button> 
     <button type="button" 
       class="btn btn-danger btn-sm js-delete-case" 
       data-url="{% url 'case_delete' case.id %}"> 
     <span class="glyphicon glyphicon-trash"></span> Delete 
     </button> 
    </td> 
    </tr> 

{% endfor %} 
    </tbody> 
    </table> 

    <div class="modal fade" id="modal-case"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 

     </div> 
    </div> 
    </div> 

this answerに見えましたが、結果は変わりませんでした。私も試しましたmyTable.row.add(case_formset.serialize()).draw();置き換え$("#case-table tbody").html(data.html_case_list);

ドキュメントは単純な例ですが、例は静的な.txtファイルで、私のデータはcontext_dictからのものであり、上記のデータを "ajax"として渡す方法は見当たりません。動的です。

$(document).ready(function() { 
    $('#example').DataTable({ 
     "ajax": '../ajax/data/arrays.txt' 
    }); 
}); 

次に、this postは役に立ちますが、私はいくつかの点で混乱しています。

$(document).ready(function() { 
    $('#example').dataTable({ 
     "ajax": 'your url here' 
    }); 
}); 

URLはどのようなものです:同様に、それは以下の例を与えるドキュメントに
?それはページにデータを表示するURLですか?

また

"ajax": ..., 
"columns": [ 
    { "data": "email" }, 
    { "data": "platform" }, 
    { "data": "coins" }, 
    ... 
] 

を示しては、私のデータは、私のコンテキスト辞書ケースでしょうか?私はこれが簡単な修正でなければならないと感じるが、困惑している。

ありがとうございます。

答えて

-1
var saveForm = function() { 
    var case_formset = $(this); 
    $.ajax({ 
     url: case_formset.attr("action"), 
     data: case_formset.serialize(), 
     type: case_formset.attr("method"), 
     dataType: 'json', 
     success: function (data) { 

     if (data.form_is_valid) { 
      $("#case-table tbody").html(data.html_case_list); 
      $("#modal-case").modal("hide"); 
       myTable.ajax.reload(); 
     } 
     else { 
      $("#modal-case .modal-content").html(data.html_form); 
     } 

     } 
    }) 

    return false; 

    }; 
+1

Welcome to StackOverflow!コードだけの答えで気をつけてください。できるときは、何が間違っていたのか、それを修正するために何をしたのかを説明する方がいいです:) – Nathan

関連する問題