我正在尝试从我的jquery客户端接收一个json对象,但是当我调用simplejson.loads(request.raw_post_data)时,我收到内部服务器错误500.服务器接收到调用,因为我收到了回调服务器在注释simplejson.loads(request.raw_post_data)行时。但是,一旦我取消注释该行,就会抛出错误。
ajaxtest.html
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#post").click(function(){
var test = new Object();
test.name = "Kalle";
test.pw = "kula";
$.ajax({
url: "ajaxtest/",
type: 'POST',
dataType: 'json',
data: {client_response: JSON.stringify(test), csrfmiddlewaretoken: '{{ csrf_token}}'},
success: function(result) {
alert(result);
}
});
});
});
</script>
views.py
from django.shortcuts import render
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponse
from django.utils import simplejson
from manges.models import User
# Create your views here.
def ajax_test(request):
print 'Hej'
if request.method == 'GET':
print 'GET'
c = User.objects.get(pk=1)
print c.emailadress
print c.password
return HttpResponse(simplejson.dumps(c, default=User.serializable))
if request.method == 'POST':
print 'POST'
data = simplejson.load(request.raw_post_data)
print json_data.name
return HttpResponse(simplejson.dumps('Got JSON!'))
def start_page(request):
print 'Start'
return render_to_response('ajaxtest.html', context_instance=RequestContext(request))
urls.py
from django.conf.urls import patterns, include, url
from manges.views import ajax_test, start_page
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('manges.views',
url(r'^$', start_page),
url(r'^ajaxtest/$', ajax_test),
# Examples:
# url(r'^$', 'myforum.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
任何想法??
答案 0 :(得分:2)
raw_post_data不包含JSON,这就是转换的原因。
发送请求时,您传递了此数据
{client_response: JSON.stringify(test), csrfmiddlewaretoken: '{{ csrf_token}}'}
Jquery在POST参数中序列化该对象。请参阅jQuery.ajax。
页面所以在服务器端,HttpRequest.raw_post_data没有直接使用JSON。要提取JSON,您需要使用包含JSON的POST参数,可通过
访问request.POST["client_response"]