Ajax Post не загружает страницу, даже если в журнале отображается вызов

#javascript #django #ajax #post

#javascript #django #ajax #Публикация

Вопрос:

У меня есть две страницы в моем приложении django.
(Это мое первое приложение django, и я также новичок в javascript.)

первая страница — таблица с флажком в каждой строке и кнопкой редактирования
вторая страница — экран ввода с кнопкой сохранения

проблема: я пытаюсь получить список идентификаторов строк с первой страницы на вторую страницу

Пока что: В событии OnClick кнопки edit я собираю все идентификаторы для выбранных строк в массив.

Я использую вызов $.ajax для отправки этого массива на вторую страницу через POST.

     $.ajax({
        url: '/secondpage/',
        type: 'POST',
        headers: { "X-CSRFToken": csrftoken,
            'Accept': 'application/json',
            'Content-Type': 'application/json' },
        data: {'idsList': JSON.stringify(selectedIds)},
        success: function (response) {
            console.log('success');
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("ERROR "   xhr.status   " - "   thrownError);
        }                        
      });
  

После выбора некоторых строк на первой странице, когда я нажимаю кнопку Редактирования,
Я вижу в журнале django следующую запись
[13/Aug/2020 14:36:14] "POST /secondpage/ HTTP/1.1" 200 41403
но secondpage не загружается. Я все еще вижу первую страницу в браузере.

И в Dev. Инструменты Я вижу «успех» в качестве последнего сообщения консоли.

Чего я не понимаю? Кто-нибудь может мне помочь?
Заранее спасибо.

Забыл добавить это в первоначальном сообщении:

 def secondpage(request):

    idsList = request.POST.getlist('idsList[]')

    return render(request, "secondpage.html", {'listIds': idsList})
  

Ответ №1:

Вы просто отправляете вызов ajax на secondpage/ . Нет ничего, что указывало бы на загрузку в браузере. Вам нужно сделать один из нескольких вариантов:

  1. получите результаты из ответа POST и загрузите этот результат в `pageone’ на месте

  2. Перенаправьте пользователя на /secondpage/some/variable/values , заставьте def secondpage() выполнить вычисления, затем визуализируйте secondpage.html

ОБНОВЛЕНИЕ ПОСЛЕ РЕДАКТИРОВАНИЯ ОПЕРАЦИИ:

Вы неправильно используете ajax. С ajax вы остаетесь на текущей странице (URL). Он выходит и извлекает некоторые значения из серверной части (server) и обновляет страницу, на которой он находится в данный момент. Что вы делаете, так это отправляете запрос в новое представление. Он возвращает полную веб-страницу, с которой вы ничего не делаете.

Вероятно, вы хотите просто использовать форму:

 <form action="/secondpage" method="POST">
    <input type="checkbox" id="vehicle2" name="vehicle2" value="Car" />
    ....
    <input type="submit" value="go to page 2" />
</form>
  

Затем соберите проверенные значения в список в представлении.

Комментарии:

1. Извините. Я добавил код для просмотра в сообщение.

2. Смотрите отредактированный ответ, используя <form> . У вас уже есть форма. Используйте его.

3. Спасибо за разъяснение. Мне нужно, чтобы список передавался на вторую страницу при нажатии кнопки редактирования на первой странице. Можете ли вы предложить способ сделать это? TIA

4. И перенаправил ли пользователь на /secondpage ? Покажите код для формы и кнопки редактирования