Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django AJAX Post抛出断开的管道并导致GET_Django - Fatal编程技术网

Django AJAX Post抛出断开的管道并导致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' %}">

我正在通过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/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
您几乎没有问题

  • 如果只想发送ajax,则不必使用
    表单
    。表单使用
    method=GET
    ,提交时将发送GET请求
  • 所以,只需删除表单或在submit中添加
    return false
    ,或者只需添加id为的
    e.preventDefault()
    ,我将使用这种方式进行编辑

  • 在ajax中添加
    csrfmiddlewaretoken

  • 使用
    {%url%}
    更改您的url。可能
    {%url'帮助'%}
    (您必须设置自己的url)

  • 另外,在接受ajax返回后,您将添加
    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)