Я хочу знать, почему произошла ошибка, когда я отправил массив для просмотра с помощью jquery ajax (django, jquery) - PullRequest
0 голосов
/ 02 июня 2019

привет, у меня вопрос

Я пытаюсь реализовать удаление строк с помощью jquery ajax.

Я отправил массив для просмотра в jquery ajax

В это время произошла ошибка. Содержание ошибки следующее:

сообщение об ошибке:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\django_inflearn2\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\django_inflearn2\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\django_inflearn2\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\django_inflearn2\todo\views.py", line 23, in todo_delete_ajax
    todo_ids = request.POST['todo_arr']
  File "C:\django_inflearn2\venv\lib\site-packages\django\utils\datastructures.py", line 80, in __getitem__
    raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'todo_arr'
[02/Jun/2019 06:11:29] "POST /todo/todo_delete_ajax/ HTTP/1.1" 500 19607

если вы знаете, в чем причина и как исправить ошибку, сообщите мне

спасибо ~!

JQuery, AJAX

$('#todo_delete_button').click(function(e){
    e.preventDefault();
    // todo_check
    alert("삭제 버튼 ")
    // Get checked checkboxes
    var todo_arr = [];
    $('.td_check').each(function() {
        if (jQuery(this).is(":checked")) {
            var id = this.id;
            todo_arr.push(id);
        }
    });
    alert('todo_arr : '+ todo_arr)

    $.ajax({
      type: "POST",
      url: 'todo_delete_ajax/',
      data: {
          todo_arr:todo_arr,
          csrfmiddlewaretoken: '{{ csrf_token }}'
      },
        success: function(result) {
            alert('todo_delete_ajax is success ');
        }
    });
})

и

шаблон URL

    path('todo_delete_ajax/',views.todo_delete_ajax, name ="todo_delete_ajax"),

просмотр


def todo_delete_ajax(request):
    # print("request " , request )
    todo_ids = request.POST['todo_arr']
    print("todo_ids : ", todo_ids)

    return redirect('/todo/')

1 Ответ

1 голос
/ 02 июня 2019

Я вижу, что вы просто пытаетесь отправить идентификаторы флажков, которые отмечены на сервере.

Это означает, что если флажки не установлены, то todo_arr становится null

Вам необходимо дать шанс этому вхождениюway:

def todo_delete_ajax(request):
    todo_ids = request.POST.get("todo_arr", None)

    // check if there are any todos 
    if todo_ids:
        print("todo_ids : ", todo_ids)
        return redirect('/todo/')

    // else, do something else

request.POST.get гарантирует, что если todo_arr пусто, то todo_ids равно None.Вы получаете эту ошибку, потому что пытаетесь получить то, чего не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...