Django AJAX Post抛出断开的管道并导致GET
我正在通过AJAX向Django服务器发送一个POST请求,Django收到POST请求后,它抛出一个“断管错误”,并向相同的url发起GET请求,但搜索“csrfmiddlewaretoken”。这正常吗?如何避免GET请求Django AJAX Post抛出断开的管道并导致GET,django,Django,我正在通过AJAX向Django服务器发送一个POST请求,Django收到POST请求后,它抛出一个“断管错误”,并向相同的url发起GET请求,但搜索“csrfmiddlewaretoken”。这正常吗?如何避免GET请求 [script] <script src="{% static 'js/jquery-3.3.1.min.js' %}"></script> <script src="{% static 'js/js_cookie.js' %}">
[script]
<script src="{% static 'js/jquery-3.3.1.min.js' %}"></script>
<script src="{% static 'js/js_cookie.js' %}"></script>
<script src="{% static 'js/csrf.js' %}">
</script>
<script>
function myfunc(){
$.ajax({
url: "help",
type: 'POST',
data: {
"hello": "hello",
},
})
}
</script>
[views.py]
def help_view(request):
if request.method == 'GET':
return render(request, 'jsnapy_wizard/help.html')
if request.method == 'POST':
print request.POST
return render(request, 'jsnapy_wizard/help.html')
[urls.py]
urlpatterns = [
url(r'help', help_view, name='help'),
Error
<QueryDict: {u'hello': [u'hello']}>
[12/Jul/2018 07:17:37] "POST /help HTTP/1.1" 200 670
[2018-07-12 07:17:37,677] - Broken pipe from ('127.0.0.1', 49808)
[12/Jul/2018 07:17:37] "GET /help?csrfmiddlewaretoken=nPvGEmGRGLhzGi7X3zRDFhElKLOaMR1CQbZoUA5lwPCCWbdkyVFEPLeE4vzfQ9pC HTTP/1.1" 200 670
[脚本]
函数myfunc(){
$.ajax({
网址:“帮助”,
键入:“POST”,
数据:{
“你好”:“你好”,
},
})
}
[views.py]
def帮助视图(请求):
如果request.method==“GET”:
返回渲染(请求“jsnapy_向导/help.html”)
如果request.method==“POST”:
打印请求.POST
返回渲染(请求“jsnapy_向导/help.html”)
[url.py]
URL模式=[
url(r'help',help_view,name='help'),
错误
[12/Jul/2018 07:17:37]“发布/帮助HTTP/1.1”200 670
[2018-07-12 07:17:37677]-来自('127.0.0.1',49808'的断裂管道
[2018年7月12日07:17:37]“获取/帮助?csrfmiddlewaretoken=NPVGEGRGGLHZGI7X3ZRDHELKLOAMR1CQBZOUUA5LWPCWBDKYVFEPLE4VZFQ9PC HTTP/1.1”200 670
您几乎没有问题
表单
。表单使用method=GET
,提交时将发送GET请求return false
,或者只需添加id为的e.preventDefault()
,我将使用这种方式进行编辑
csrfmiddlewaretoken
{%url%}
更改您的url。可能{%url'帮助'%}
(您必须设置自己的url)success
或error
。我只添加一个示例。然后您将从视图中发送jsonresonse
,而不是呈现整个模板
<body>
<form>
{% csrf_token %}
<label for="test">Input</label>
<input type="text" id="test">
<button type="submit" id="ajaxBtn">Submit</button>
</form>
<script>
function myfunc(){
$.ajax({
url: "{% url 'help' %}",
type: 'POST',
data: {
"hello": "hello",
"csrfmiddlewaretoken": "{{ csrf_token }}"
},
success: function(response) {
console.log(response);
},
error: function(rs, e) {
console.log(e);
}
})
}
$(document).ready(function(){
$('#ajaxBtn').click(function(e){
e.preventDefault();
myfunc();
})
})
</script>
</body>
ajax函数中的
url
错误。请使用下面尝试的{%url%}
调用url,但仍然使用相同的url:“{%url'jsnapy\u向导:帮助“%}”,请上载完整代码。您在哪里调用myfunc()
?{%csrf_token%}输入提交函数myfunc(){$.ajax({url:{%url'jsnapy_向导:帮助'%}),键入:'POST',数据:{“hello”:“hello”,},})}我猜get请求是在onclick函数之后发送的。您需要在myfunc()之后添加return false
,然后get
请求将不会发送。它解决了我遇到的问题,但现在输入到输入元素中的数据在单击submit按钮后仍保留在那里。尝试重新加载位置,但在AJAX中成功,运气不佳。有任何线索吗?
def help_view(request):
if request.method == 'GET':
return render(request, 'jsnapy_wizard/help.html')
if request.method == 'POST':
# make sure that 'POST' and 'ajax' is different
if request.is_ajax():
print 'ajax work'
data = {
'your_data': 'your_data_example',
}
return JsonResponse(data)