在对django服务器执行ajax请求时,使用字符串而不是JSON

时间:2012-04-24 06:46:58

标签: jquery ajax django json

views.py:

def get_accounts( request ):
    if request.is_ajax():
        res = ["foo","bar"]
        json = simplejson.dumps(res)
        return HttpResponse(json, mimetype='application/json')
    return HttpResponseNotFound

urls.py:

   ( r'^get_accounts/$', 'get_accounts'),

client.html:

$.get('/django/backoffice/bopanel/get_accounts',{'acc':$('.nr').text().replace(/^\s+||\s+$/g,'')}, function(data) {
  alert(data[0]);      
  });

我很惊讶地收到一个内容提示框:

"["

什么意思是我得到了字符串而不是数组,这对我来说非常奇怪,绝对不是我所期待的。

在萤火虫中我看到两个后续的GET请求:

GET http://127.0.0.1:8000/django/backoffice/bopanel/...nts?acc=17114%2FF01055%2FTP%0A%09%09++++++++++++
301 MOVED PERMANENTLY
    24ms

GET http://127.0.0.1:8000/django/backoffice/bopanel/...ts/?acc=17114%2FF01055%2FTP%0A%09%09++++++++++++
200 OK
    16ms

我不明白为什么我会收到两个请求以及为什么第一个请求有301状态。我不明白这是如何使json显示为字符串。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

  

我不明白为什么我会收到两个请求以及为什么第一个请求有301状态。

Django默认情况下会在没有任何网址的情况下为任何网址添加斜杠(请参阅common middleware)。

您想使用content_type代替mimetype,即:

return http.HttpResponse(json.dumps(res), content_type='application/json')