以djangoforms从AJAX获取POST数据
我将在Django中获取参数forms的AJAX请求,这就是我正在做的事情:
base.html文件:
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文件:
它有效 ,谢谢!
虽然,我有两个问题:
- 在这种情况下,我在哪里发送“我的文字”? 我发送它从名称字段返回ACTUAL数据并且不返回“我的文本”
- 该页面仍在重新加载。 我想把它完全变成AJAX。 我的意思是创建一个python函数,将数据从POST请求添加到MySQL数据库,并返回AJAX脚本操作的结果。 没有页面重新加载的一切。 我怎样才能做到这一点?
发生的事情是您没有阻止浏览器的默认submit
操作发生。 所以你的Ajax POST已经完成,但随后浏览器本身就会发布POST – 而且正如Michal所指出的那样,你的表单不包含name
字段,因此查找失败了。
你需要做两件事来解决这个问题。 首先,使用e.preventDefault();
在你的JS点击方法中。 其次,检查视图顶部的request.is_ajax()
。
防止表单提交“e.preventDefault()”。 此外,最好是在用户点击Enter而不是点击的情况下绑定到表单:
base.html文件
main.js
$(document).ready(function(){ $("#register").live("submit", function(e){ $.post("/", { name: "MY TEXT", }); e.preventDefault(); }); });
我想问题是你没有在html中命名文本输入:
我认为应该是
$.post("../save_note/", { data:'name=MY TEXT' });
和
if 'name' in request.POST:
您可以设置更强大的表单提交function来执行相同的操作,而不是使用单击处理程序。 返回false会取消默认提交行为。
$("form").submit(function() { $.post("/", { name: "MY TEXT", }); return false; });