Ich versuche, ein serverseitiges Ajax-Antwortskript in eine Django HttpResponse zu konvertieren, aber anscheinend funktioniert es nicht.
Dies ist das serverseitige Skript:
/* RECEIVE VALUE */
$validateValue=$_POST['validateValue'];
$validateId=$_POST['validateId'];
$validateError=$_POST['validateError'];
/* RETURN VALUE */
$arrayToJs = array();
$arrayToJs[0] = $validateId;
$arrayToJs[1] = $validateError;
if($validateValue =="Testuser"){ // Validate??
$arrayToJs[2] = "true"; // RETURN TRUE
echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURN ARRAY WITH success
}
else{
for($x=0;$x<1000000;$x++){
if($x == 990000){
$arrayToJs[2] = "false";
echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURNS ARRAY WITH ERROR.
}
}
}
Und das ist der konvertierte Code
def validate_user(request):
if request.method == 'POST':
vld_value = request.POST.get('validateValue')
vld_id = request.POST.get('validateId')
vld_error = request.POST.get('validateError')
array_to_js = [vld_id, vld_error, False]
if vld_value == "TestUser":
array_to_js[2] = True
x = simplejson.dumps(array_to_js)
return HttpResponse(x)
else:
array_to_js[2] = False
x = simplejson.dumps(array_to_js)
error = 'Error'
return render_to_response('index.html',{'error':error},context_instance=RequestContext(request))
return render_to_response('index.html',context_instance=RequestContext(request))
Ich verwende simplejson, um die Python-Liste zu codieren (damit ein JSON-Array zurückgegeben wird). Ich konnte das Problem noch nicht herausfinden. Aber ich denke, dass ich etwas falsch gemacht habe mit dem 'Echo'.
@ajax_request
.Antworten:
Normalerweise verwende ich ein Wörterbuch und keine Liste, um JSON-Inhalte zurückzugeben.
Pre-Django 1.7 würden Sie es wie folgt zurückgeben:
Verwenden Sie für Django 1.7+
JsonResponse
wie in dieser SO-Antwort gezeigt wie folgt :quelle
Neu in Django 1.7
Sie können JsonResponse- Objekte verwenden.
aus den Dokumenten:
quelle
ensure_ascii
Ich habe noch keinen Weg gefunden, ihn zu überschreiben". Erstellt eine neue Frage für diese: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(erfordert Django 1.9 oder neuer)Ich benutze das, es funktioniert gut.
Alternative:
In Django 1.7 wurden JsonResponse- Objekte zum Django-Framework selbst hinzugefügt, was diese Aufgabe noch einfacher macht:
quelle
from django.utils import simplejson
ist für die Abwärtskompatibilität.JsonResponse(status=404, data={'status':'false','message':message})
Seit Django 1.7 haben Sie eine Standard- JsonResponse , die genau das ist, was Sie brauchen:
Sie müssen nicht einmal Ihr Array json.dump.
quelle
Und in der Ansicht:
quelle
Für diejenigen, die Django 1.7+ verwenden
offizielle Dokumente
quelle
Sie sollten den Django-Serializer verwenden, um bei Unicode-Dingen zu helfen:
quelle
Mit Django Class-basierten Ansichten können Sie schreiben:
und mit Django-Rest-Framework können Sie schreiben:
quelle
Es ist sehr praktisch mit Django Version 1.7 oder höher, da Sie die JsonResponse-Klasse haben, die eine Unterklasse von HttpResponse ist.
Für ältere Versionen von Django müssen Sie ein HttpResponse-Objekt verwenden.
quelle
Wie verwende ich die Google App Engine mit Ajax (JSON)?
Code Javascript mit JQuery:
Code Python
quelle
Dies ist meine bevorzugte Version mit einer klassenbasierten Ansicht. Unterklassifizieren Sie einfach die Basisansicht und überschreiben Sie die Methode get () -.
quelle
Django-Code
views.py
:HTML-Code
view.html
:quelle
Importieren Sie zuerst Folgendes:
Wenn Sie den JSON bereits haben:
Wenn Sie den JSON von einer anderen HTTP-Anforderung erhalten:
quelle
Verwenden Sie JsonResponse
quelle
Verwenden Sie in der Ansicht Folgendes:
zum Abrufen von Validierungsnachrichten ohne HTML
quelle