在Django中返回对post请求的正确响应

时间:2011-03-20 00:26:58

标签: django jquery

<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点工作放在第一位。

  3. 目标

    发布后,我想从服务器捕获返回的响应(无论是“hello”消息,还是显示成功消息的网页 - 存储在“success.html”中)并显示在没有浏览器刷新新网页的login_frm的位置。

1 个答案:

答案 0 :(得分:0)

有趣。 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(); .....})