[POST Ajax用于一种形式的多个按钮

问题描述 投票:0回答:1

我正在下面创建一种具有AuthLogin按钮的表单,这些表单计划处理发送OTP并分别检查OTP是否有效。

我正在使用以下代码跟踪此Process a Form Submit with Multiple Submit Buttons in 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)

感谢任何帮助

javascript jquery html django ajax
1个回答
0
投票

您的选择有误:

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

更改为:

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

$("#getotp .control-group .controls .btn").click(...
© www.soinside.com 2019 - 2024. All rights reserved.