一尘不染

从Django格式AJAX获取POST数据

ajax

我将在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 at /在“”中找不到“键’name’”

我做错了什么?

我更改了代码: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-script。一切都无需重新加载页面。我怎样才能做到这一点?

阅读 349

收藏
2020-07-26

共1个答案

一尘不染

发生的事情是您没有阻止浏览器的默认submit操作发生。因此,您的Ajax POST完成了,但是浏览器本身立即进行了POST-
并且,正如Michal所指出的,您的表单不包含name字段,因此查找失败。

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

2020-07-26