以django形式从AJAX获取POST数据

时间:2012-05-30 11:21:36

标签: jquery ajax django forms

我将在Django中获取参数形式的AJAX请求,这就是我正在做的事情:

base.html文件:

<form method="POST">{% csrf_token %}
First name: <input type="text">
<input type="submit" value="Register" id="register">
</form>

main.js:

$(document).ready(function(){
    $("#register").live("click", function(e){
        $.post("/", {
            name: "MY TEXT",
        });
    });
});

views.py:

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.context_processors import csrf

def home(request):
    if request.method == 'POST':
        print request.POST['name']
    return render_to_response('registration.html', {},
    context_instance=RequestContext(request))

是的,我知道此时我的JS并没有从文本表单中获取真实数据,它只发送一个静态文本“MY TEXT”。但是当我按下按钮时,我明白了 “/的MultiValueDictKeyError “密钥'名称'未在”

中找到

我做错了什么?

我改变了我的代码: main.js

$(document).ready(function(){
    $("#register").live("click", function(e){
        e.preventDefault();
        $.post("/", {
           name:'MY TEXT'
        });
    });
});

base.html文件:

<form method="POST">{% csrf_token %}
    First name: <input type="text" name="name">
    <br>
    <input type="submit" value="Register" id="register">
</form>

有效,谢谢!

虽然,我有两个问题:

  1. 在这种情况下,我在哪里发送“我的文字”?我将它从名称字段返回ACTUAL数据,但不返回“MY TEXT”
  2. 页面仍在重新加载。我想把它完全变成AJAX。我的意思是创建一个python函数来将数据从POST请求添加到MySQL数据库,并返回AJAX脚本的操作结果。没有页面重新加载的一切。我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

发生的事情是您没有阻止浏览器的默认submit操作发生。所以你的Ajax POST已经完成,但随后浏览器本身立即发布 - 而且正如Michal所指出的那样,你的表单不包含name字段,因此查找失败。

你需要做两件事来解决这个问题。首先,在JS click方法中使用e.preventDefault();。其次,检查视图顶部的request.is_ajax()

答案 1 :(得分:2)

阻止表单提交“e.preventDefault()”。此外,如果用户点击Enter而不是点击:

,最好绑定到表单

base.html文件

<form method="POST" id="register">{% csrf_token %}
First name: <input type="text">
<input type="submit" value="Register">
</form>

main.js

$(document).ready(function(){
    $("#register").live("submit", function(e){
        $.post("/", {
            name: "MY TEXT",
        });
        e.preventDefault();
    });
});

答案 2 :(得分:1)

我想问题是你没有在html中命名文本输入:

<input type="text" name="name">

答案 3 :(得分:0)

我认为应该是

$.post("../save_note/", {
        data:'name=MY TEXT'
    });

并且

if 'name' in request.POST:

答案 4 :(得分:0)

您可以设置更强大的表单提交功能来执行相同的操作,而不是使用单击处理程序。返回false会取消默认提交行为。

$("form").submit(function() {
    $.post("/", {
        name: "MY TEXT",
    });

    return false;
});