Django的request.is_ajax()返回false
这个问题并不新鲜,不过我花了很多时间,还是没能解决。
<form id="test_data_form" action={% url 'insert_test_data' %} method="post">{% csrf_token %}
<input type="submit" value="Insert test data">
<div id="message"></div>
</form>
<script type="text/javascript">
var form = $("test_data_form");
$(document).ready(function() {
form.submit(function() {
$.ajax({
data: form.serialize(),
url: form.attr('action'),
cache: false,
type: form.attr('method'),
dataType:'json',
success: function(response) {
alert("1");
},
error: function() {
alert('Error!');
}
}
);
return false;
}
);
}
);
</script>
views.py
@csrf_exempt
def insert_test_data(request):
print request.is_ajax()
data = {'success': True, 'html': "text"}
return HttpResponse(json.dumps(data), mimetype="application/json")
urls.py
url(r'^hello/insert_test_data/$', insert_test_data, name="insert_test_data"),
首先,我发现成功的结果没有被捕获,所以在调试的时候我发现Django并不认为这是一个ajax请求,而是把我重定向到了另一个页面:/insert_test_data。我想留在主页上。
我找到了很多关于这个问题的建议(比如:cache: false),但都没有帮助。我知道我可能漏掉了什么明显的东西,但就是搞不清楚到底是什么。非常感谢任何帮助。
1 个回答
0
看起来处理表单提交的JavaScript代码一开始没什么问题,但其实有一个错误:
var form = $("test_data_form");
如果你使用Firebug或者Chrome的开发者工具在控制台查询这个元素,你会发现什么都查不到,因为你缺少了选择器(比如标签、id、类名等)。从你的表单标签来看,我觉得你是想通过id来选择这个元素:
var form = $("#test_data_form");