get()无法找到POST数据

时间:2017-01-14 02:02:12

标签: javascript jquery python ajax django

我正在尝试在我的django应用程序中构建ajax注释。注释写在TextField()中,其名称=“comments_text”和class =“comment_text。因此,要获取我尝试ajax_comment = request.POST.get('comment_text')的输入文本。但是由于某种原因,这会返回None。这是我的代码:

models.py

class Comments(models.Model):
    comment_id = models.IntegerField()
    parent_id = models.IntegerField()
    comment_text = models.TextField(max_length=350, blank=True)

forms.py

class CommentForm(forms.ModelForm):
    class Meta:
        model = Comments

        fields = [
            'comment_text'
        ]

views.py

def article(request, category, id):

    ...

    comment = CommentForm(request.POST or None)

    ajax_comment = request.POST.get('comment_text')
    print(ajax_comment) #returns None

    if request.is_ajax(): #True
        if comment.is_valid(): # True
            ajax_comment = request.POST.get('comment_text')
            print(ajax_comment) #returns None
            return HttpResponse('Something')

    context = {
        'comment': comment,
    }

    return render(request, 'article.html', context)

模板

<div class="commentsContainer">

    <form action="" class="comment_form">{% csrf_token %}
        {{ comment.comment_text|add_class:"comment_text" }}
        <input type="submit" value="Comment" class="comment_submit">
    </form>
    <div class="comment_div">
        <h3>Username1</h3>
        <p>Something</p>
    </div>
</div>

base.js

$('.comment_form').on('submit', function(e) {
e.preventDefault();

var url = window.location.href.split('?')[0];
    console.log(url); // this works fine

$.ajax({
    type: 'POST',
    url: url,
    dataType: 'json',
    data: {
        text: $('.comment_text').val(),
        csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
},
    success: function(text) {
        $('.comment_div').append("<div class='comment_div'><h3>username</h3><p>" + text + "</p></div>");
        console.log(text); // text=something&csrfmiddlewaretoken=sWJashvQgbKG9hM0imiFTjj3EQrCP5qRfq60XraoQK1SULlPumJonyMktt9DllEC
    }
})


});

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

检查浏览器的网络标签中的Ajax请求标头。它可能要么不传递参数'text'要么传递text = '' chrome_network_tab

在任何一种情况下,答案都是none

可能的原因是在ajax请求期间text: $('.comment_text').val(),没有获得所需的值(因为。comment_text类不存在; Django模板是否添加了class属性?)。因此, Django View 未收到要在控制台上打印的text值。

此外,您的ajax请求与Django View之间存在不一致。

<强> views.py

ajax_comment = request.POST.get('comment_text')

<强> base.js

data: {
        text: $('.comment_text').val(),

base.js - 修订

data: {
        comment_text: $('.comment_text').val(),