J’essaie de recevoir un object JSON de mon client JQuery, mais lorsque j’appelle le fichier simplejson.loads (request.raw_post_data), je reçois le message d’erreur interne 500 du serveur. Le serveur reçoit l’appel, car je reçois le rappel simplejson.loads (request.raw_post_data) est commentée. Mais dès que je retire mon commentaire de cette ligne, l’erreur est renvoyée.
ajaxtest.html
$(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.ssortingngify(test), csrfmiddlewaretoken: '{{ csrf_token}}'}, success: function(result) { alert(result); } }); }); });
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.consortingb 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.consortingb.admindocs.urls')), url(r'^admin/', include(admin.site.urls)), )
Des idées??
raw_post_data ne contient pas JSON, c’est pourquoi la conversion est en cours.
Lorsque vous envoyez la demande, vous avez transmis ces données
{client_response: JSON.ssortingngify(test), csrfmiddlewaretoken: '{{ csrf_token}}'}
Jquery sérialise cet object dans les parameters POST. Voir la page pour jQuery.ajax .
Ainsi, côté serveur, HttpRequest.raw_post_data ne dispose pas directement de JSON. Pour extraire le JSON, vous devez utiliser le paramètre POST qui contient JSON, accessible via
request.POST["client_response"]