我将在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' }); }); });
<form method="POST">{% csrf_token %} First name: <input type="text" name="name"> <br> <input type="submit" value="Register" id="register"> </form>
它有效 ,谢谢!
虽然,我有两个问题:
发生的事情是您没有阻止浏览器的默认submit操作发生。因此,您的Ajax POST完成了,但是浏览器本身立即进行了POST- 并且,正如Michal所指出的,您的表单不包含name字段,因此查找失败。
submit
name
您需要做两件事来解决此问题。首先,e.preventDefault();在您的JS click方法中使用。其次,request.is_ajax()在视图顶部检查。
e.preventDefault();
request.is_ajax()