数据未使用jquery .ajax()发送到Django视图

时间:2013-03-05 17:47:37

标签: django jquery django-views

我正在尝试创建一个单独的ajax调用。 ajax调用被发送到服务器,但是我发送的数据在视图中的请求对象中不可用。当我打印request.post时,它会显示<QueryDict: {}>。没有数据发送到服务器。我知道浏览器正在发送数据,因为我可以在chrome中的请求有效负载中查看它。

脚本:

$("#chatform").submit(function(e) {
    e.preventDefault();
    //serialText = $(this).serialize();
    var userText = $("#usertext").val();
    var xmlRequest = $.ajax({
            type: "POST",
            url: "/sendmessage/",
            data: {'tosend': userText},

            //dataType: 'json',
            contentType: "application/json; charset=utf-8",
            success: function(data){
                appendMessageSent(data.messagesent);
            }
    });
});

view.py:

def send_message(request):
    if request.is_ajax():
        message = "The hell with the world"

        print request.POST
        json = simplejson.dumps(
            {'messagesent' : request.POST['tosend']+"This is how we do it"}
        )
        return HttpResponse(json, mimetype='application/javascript')

HTML

<form id="chatform" action="" method="POST" >
        <input type='hidden' name='csrfmiddlewaretoken' value='8idtqZb4Ovy6eshUtrAiYwtUBboW0PpZ' />
        <input type="text" name="chatarea" id="usertext"/>
        <input type="submit" value="Send">
</form>

我收到错误消息,指出在tosend字典中找不到密钥request.post

MultiValueDictKeyError: "Key 'tosend' not found in <QueryDict: {}>

任何人都可以告诉我为什么没有将数据发送到服务器和/或为什么我在我的视图中无法访问它?

1 个答案:

答案 0 :(得分:7)

要使表单数据显示在request.POST中,请使用contentType: "application/x-www-form-urlencoded"

如果您使用application/json,则必须自行解析原始数据(django&lt; 1.4中的request.raw_post_data,django&gt;中的request.body = 1.4):

def send_message(request):
    if request.is_ajax():
        message = "The hell with the world"

        data = json.loads(request.body)
        result = json.dumps({'messagesent' : data['tosend'] + "This is how we do it"})
        return HttpResponse(result, mimetype='application/javascript')