Django在ajax请求后重定向

时间:2020-06-29 12:01:38

标签: django ajax

我想创建一个学校网站,您必须在该网站上输入邀请代码才能注册。我想使用ajax POST请求验证此代码,但是当我尝试发出验证视图的请求时,它会使用 JSON 代码重定向到页面。

我的AJAX

    {%extends "base.html"%}
    
    {%block content%}
    
    <script>
        $('#code_form').on('submit', function(evt){
            evt.preventDefault();
            let form = evt.target
            $.ajax({
                url: form.action,
                type: "POST",
                data: {'code': $('input[name="code"]')},
                headers: {'X-CSRFToken': "{{csrf_token}}"},
                success: function(data){
                    window.location.href = data.url;
                    let status = JSON.parse(data)['ok']
                    if(status){
                        console.log('Good code');//This not executing
                    }else{
                        console.log('Bad code');//this too
                    }
                }
            })
        });
    </script>
    
    
    
    <form method = "POST" id = "code_form" action="{%url 'reg:submit'%}">
        {%csrf_token%}
        Enter your invite code: {{form.code}}<br>
        <button  id = "submit">Continue</button>
    </form>
    
    {%endblock%}

Views.py

from .forms import StartF #form for code (contains only one field)
from django.http import JsonResponse
from django.core.exceptions import ObjectDoesNotExist

#here must be one more view, but it works fine

def submit(request):
    code = request.POST.get('code')
    data = {}
    try:
        user = Unregistered.objects.all().get(pk = code)
    except ObjectDoesNotExist:
        data['ok'] = False
    else:
        data['ok'] = True

    return JsonResponse(data)

我的urls.py

from django.urls import path
from . import views
from django.conf.urls import url

app_name = 'reg'

urlpatterns = [
    url(r'^$', views.start, name='start'), #that one view
    url(r'^ajax/submit/$', views.submit, name='submit'),#this view works not fine.
    
]

这是它返回的内容(确定=假,因为我输入了错误的代码): Error page

1 个答案:

答案 0 :(得分:0)

  1. 确保将jquery.js包含到html文件中

  2. 将您使用ajax的代码放入$( document ).ready

     $( document ).ready(function() {
     ...
         $('#code_form').on('submit', function(evt){
         ...
         }
     ...
     }