POST Ajax для нескольких кнопок в одной форме - PullRequest
0 голосов
/ 09 ноября 2019

Я создаю одну форму с кнопками Auth и Login, которая предназначена для обработки отправки OTP и проверки правильности OTP, соответственно ниже.

Я следую этому Обработка aОтправка формы с несколькими кнопками отправки в Javascript с использованием приведенного ниже кода, но когда я получаю любую кнопку, javascript, кажется, не работает, и я не могу не получить значения console.log. В браузере нет ошибок.

otplogin.html

    <div id="otplogin">
     <form class="form-horizontal" id="getotp" >
          {% csrf_token %} 
            <div class="control-group">
                <label class="control-label" for="username">Username</label>
                <div class="controls">
                    <input type="text" id="username" name="username"  placeholder="Username">
                </div>
            </div>
            <div class="control-group">
                <div class="controls">
                    <button type="submit" value='auth'  class="btn">Auth</button>
                </div>
            </div>
        <div class="control-group">
            <label class="control-label" for="otp">OTP</label>
            <div class="controls">
                <input type="otp" name="otp" id="otp" placeholder="OTP">
            </div>
        </div>
        <div class="control-group">
            <div class="controls">
                <button type="submit" value='login'  class="btn">Login</button>
            </div>
        </div>
        </form>
    </div>
<script type="text/javascript">
(function () {  //the browser said the '$' as in the linked answer can not be recognized
$("#getotp btn").click(function (ev) {
        ev.preventDefault() 
        if ($(this).attr("value") == "auth") {
            console.log("CHECK 1");
            $.ajax({
                type:'POST',
                url:'/getotp2',
                data:{
                    username:$('#username').val()
                    ,csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
                },
                success: function server_response(response) {
                console.log('POST1 success')
                }
            });
        }
        else if ($(this).attr("value") == "login") {
            console.log("CHECK 2");
            $.ajax({
                type:'POST',
                url:'/otplogin',
                data:{
                    username:$('#username').val(),
                    otp:$('#otp').val(),
                    csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
                },
               success: function server_response(response) {
                console.log('POST2 success')
                }
            });
        }
    });
});

</script>

views.py

def otplogin(request):
    if request.POST:
        otpentered=request.POST.get('otp','')
        if otpentered==otp:
            return redirect('/main')
    return render(request,'esearch/otplogin.html')

def getotp2(request):
    logout(request)
    username = otp = ''
    if request.POST:
        username = request.POST.get('username','')
        otp = pyotp.TOTP('base32secret3232').now()
        OTPEmail('You Auth',username,[],'Your auth is '+otp)
        print ('POST'+username)
        print ('POST'+otp)
        return JsonResponse(json.dumps({'username':username,'otp':otp}),safe=False)

Оцените любую помощь по этому вопросу

1 Ответ

1 голос
/ 09 ноября 2019

Ваш выбор неверен:

(function(){
$("#getotp btn").click(function (ev){...});}

Изменить на:

$(document).ready(function(){
$(".btn").click(function(ev){...});});

Или

$("#getotp .control-group .controls .btn").click(...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...