@artinnok
бекенд-программист

Почему после отправки POST — запроса через AJAX идет перенаправление на localhost:8000/?

Использую JQuery AJAX и Django.

При нажатии кнопки "Добавить" отправляется POST-запрос (csrf token создается с помощью файла csrf.js, как в документации), исходный адрес локального серва - localhost:8000, после отправки запроса меняется на - localhost:8000/?. Почему это происходит?

Обрывок файла index.html:
<form>
    <input type = "text" id = "task_text"><input type = "submit" value = "Добавить" id = "add">
</form>


Обрывок файла index.js:
$('#add').click(function()
		{
			text = $('#task_text').val();

			$.ajax(
			{
				url: '/test/',
				type: 'POST',
				data: {task_text: text}, 
				success: function(text){
					console.log(text)
				},
			});
		});


Обрывок файла views.py:
def test(request):
	if request.is_ajax():
		r = request.POST['task_text']
		Task.objects.create(text = r)
		return redirect('/')
	else:
		message = "bad"
		return HttpResponse(message)


Если есть советы, критика кода - пожалуйста, пишите)

Также, есть сопутствующий вопрос:
  • Можно ли использовать AJAX без формы <form> и <input type = "submit">, используя только <input type = "button"> и файл index.js?
  • Вопрос задан
  • 1591 просмотр
Решения вопроса 1
MAKAPOH
@MAKAPOH
многостаночник
исходный адрес локального серва - localhost:8000, после отправки запроса меняется на - localhost:8000/?. Почему это происходит?
По всей видимости из за этой строки:
return redirect('/')

Можно ли использовать AJAX без формы
Можно, повесьте на кнопку обработчик нажатия и внутри отправляйте ajax запрос. Вы собственно так и делаете, поэтому форму можно просто удалить из разметки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Scrum
Front-End developer
$('#add').click(function()
    {
      text = $('#task_text').val();

      $.ajax(
      {
        url: '/test/',
        type: 'POST',
        data: {task_text: text}, 
        success: function(text){
          console.log(text)
        },

        return false;
 
      });
    });


И лучше вешать слушатель на форму и слушать submit

По сопутсвующему - можно.
Ответ написан
ещё на данный момент обратите внимание djbook.ru/rel1.8/ref/settings.html#append-slash
Ответ написан
Комментировать
У вас у вьюхе прописано же:
return redirect('/')
Пропишите
success: function(text){
          alert(response['msg'])
        },

А во вьюхе:
msg_value = 'Your text is add!'
response_data['msg'] = unicode(msg_value)
return JsonResponse(response_data)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы