我正在尝试使用 Django/Python 处理传入的 JSON/Ajax 请求。
request.is_ajax()正在True请求中,但我不知道 JSON 数据的有效负载在哪里。
request.is_ajax()
True
request.POST.dir包含这个:
request.POST.dir
['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', '__weakref__', '_assert_mutable', '_encoding', '_get_encoding', '_mutable', '_set_encoding', 'appendlist', 'clear', 'copy', 'encoding', 'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update', 'urlencode', 'values']
请求发布键中显然没有键。
当我查看Firebug中的 POST 时,请求中发送了 JSON 数据。
如果您将 JSON 发布到 Django,我认为您想要request.body(request.raw_post_data在 Django < 1.4 上)。这将为您提供通过帖子发送的原始 JSON 数据。从那里您可以进一步处理它。
request.body
request.raw_post_data
这是一个使用 JavaScript、jQuery、jquery-json 和 Django 的示例。
JavaScript:
var myEvent = {id: calEvent.id, start: calEvent.start, end: calEvent.end, allDay: calEvent.allDay }; $.ajax({ url: '/event/save-json/', type: 'POST', contentType: 'application/json; charset=utf-8', data: $.toJSON(myEvent), dataType: 'text', success: function(result) { alert(result.Result); } });
姜戈:
def save_events_json(request): if request.is_ajax(): if request.method == 'POST': print 'Raw Data: "%s"' % request.body return HttpResponse("OK")
Django < 1.4:
def save_events_json(request): if request.is_ajax(): if request.method == 'POST': print 'Raw Data: "%s"' % request.raw_post_data return HttpResponse("OK")