簡體   English   中英

在Django中為發布請求返回正確的響應

[英]Returning a proper response for post request in Django

<form id="login_frm" method="post" action = "/login/user_auth/"> 
    <fieldset> 
    <legend>Login:</legend> 
        <label for="id_email">Email</label> 
        <input type="text" name="email" id="id_email" /> 

        <label for="id_password">Password</label> 
        <input type="password" name="password" id="id_password" /> 

    </fieldset> 
    <input name = "login" type="submit" value="Login" /> 
</form> 


$(document).ready(function () {
    $('#login_frm').submit(function() {
            var $form = $(this);
            $.post('/login/user_auth/' , form.serialize(), function(data) {
               // alert ("function");
        alert (data);
    });
    return false;
    });
});

Django視圖:

def login_user(request):
    if request.method == 'POST':
        # perform all logic / and db access
    data = "hello"
    return HttpResponse(data)
    # return HttpResponse ('success.html')

我整個下午都被困在里面。

  1. 當我返回data作為響應時,由於某種原因,瀏覽器會通過加載空白網頁,並在上面寫上“ Hello”來顯示“ Hello”。 在上面的JavaScript函數中, alert (data); 從來沒有被稱為(我不明白為什么)。

  2. 我無法呈現success.html。 我相信,如果我在HttpResponse中編寫render_to_response,我將解決此問題。 但是,我認為使第1點起作用是第一要務。

目標

發布后,我想捕獲服務器返回的響應(無論是“ hello”消息,還是顯示成功消息的網頁-存儲在“ success.html”中),並代替login_frm而無需瀏覽器刷新新網頁。

有趣。 form是未定義的(您將其定義為$ form),將其更改為$form可解決此問題。

$(document).ready(function () {
    $('#login_frm').submit(function() {
        var $form = $(this);
        $.post('/login/user_auth/' , $form.serialize(), function(data) {
           // alert ("function");
           alert (data);
       });
    return false;
    });
});

您可能想要使用諸如event.preventDefault()類的東西,以免將來的錯誤不會像這樣被隱藏。 $('form').submit(function(e){ e.preventDefault(); .....})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM