Django中AJAX无法获取表单值且报语法错误,求解决方案
问题分析与修复方案
你的Uncaught SyntaxError: missing ) after argument list错误主要由AJAX代码里的拼写错误、语法问题和选择器错误导致,我帮你逐个排查并修正:
1. 函数名拼写错误
你把function写成了functiom,这是JavaScript解析器报错的直接原因,必须修正。
2. CSRF令牌选择器错误
你用$('input[msg=csrfmiddlewaretoken]')获取CSRF令牌,但Django生成的CSRF令牌input标签的name属性是csrfmiddlewaretoken,不是msg,所以选择器要改成$('input[name=csrfmiddlewaretoken]')。
3. AJAX配置语法错误
data对象末尾多了一个多余的#符号,导致JSON格式错误;- 配置项的逗号、括号闭合需要调整,保证语法完整。
修正后的完整AJAX代码
<script> $(document).on('submit','#chat-form',function(e){ e.preventDefault(); $.ajax({ type: 'POST', // 建议用Django的url模板标签代替硬编码,比如{% url 'chat-view' %},避免部署时URL变化 url: 'http://127.0.0.1:8000/qasim/', data: { msg: $('#chat-msg').val(), csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val() }, success: function(response){ alert("消息发送成功"); // 成功后清空输入框,提升用户体验 $('#chat-msg').val(''); }, error: function(xhr){ // 添加错误处理,方便排查问题 alert("请求出错: " + xhr.statusText); } }); }); </script>
优化后的views.py代码
你的post方法本身就是处理POST请求的,无需重复判断request.method == 'POST',可以简化:
from django.views.generic import TemplateView from django.http import HttpResponse class index(TemplateView): template_name = 'qasim/chat.html' def get(self, request): return render(request, self.template_name) def post(self, request): msg2 = request.POST.get('msg', None) # 打印到控制台验证是否成功获取值 print("收到前端消息:", msg2) # 这里可以添加消息处理逻辑,比如保存到数据库 return HttpResponse('消息已接收')
额外建议
- 尽量用Django的
{% url %}模板标签生成AJAX请求的URL,比如在urls.py中给视图配置name='chat-view'后,就可以写url: '{% url 'chat-view' %}',避免硬编码URL带来的适配问题; - 保留error回调函数,方便在请求出错时快速定位问题;
- 成功提交后清空输入框,让用户体验更流畅。
现在运行修正后的代码,就能正常获取表单值并传递到views.py中了,你可以通过控制台打印的内容验证是否成功接收到消息。
内容的提问来源于stack exchange,提问作者Qasim Khan
相关产品推荐
相关产品推荐

