5

我正在使用 Angularjs 及其 $http 模块向 Django 服务器发送 POST AJAX 请求。这是一个例子:

$http({ 
        method: 'POST', 
        url: '/url/', 
        data: 'test data'
  }).
  success(function(data, status, headers, config) {
        doSomeStuffWhenSuccess();
  });

问题是我在 Django 中得到了什么。无论我发送什么,数据始终是QueryDict对象的键,其值始终是一个空列表。

<QueryDict: {u'test data': [u'']}>

我不知道为什么。我错过了什么?

我使用几乎默认创建的 Django 应用程序和默认中间件。我只创建了一个视图并在 url config 中设置了一个 url。Django 的版本是 1.3。我将 Angular 的 $http 模块配置为始终发送包含 csrf 令牌的标头以满足 Django。

4

2 回答 2

7

我用 jQuery 参数函数解决了这个问题。我认为这是更优雅的解决方案。

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: $.param({test: data})
})

现在它像我想要的那样工作。

于 2012-06-29T20:09:49.220 回答
6

我相信 django 认为您正在发送一个 urlencoded 表单,例如。键=值&键2=值2...

如果您尝试:

$http({ 
    method: 'POST', 
    url: '/url/', 
    data: 'test=data'
})

你应该得到

<QueryDict: {u'test': [u'data']}>

您始终可以按如下方式获取数据(原始正文内容):

request.body

希望这是您正在寻找的。

于 2012-05-09T17:19:11.230 回答