Saya mencoba untuk mengubah skrip respons sisi server Ajax menjadi Django HttpResponse, tetapi tampaknya itu tidak berfungsi.
Ini adalah skrip sisi server:
/* 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.
}
}
}
Dan ini adalah kode yang dikonversi
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))
Saya menggunakan simplejson untuk menyandikan daftar Python (sehingga akan mengembalikan array JSON). Saya belum bisa memecahkan masalahnya. Tapi saya pikir saya melakukan kesalahan tentang 'echo'.
@ajax_request
.Jawaban:
Saya biasanya menggunakan kamus, bukan daftar untuk mengembalikan konten JSON.
Pra-Django 1.7 Anda akan mengembalikannya seperti ini:
Untuk Django 1.7+, gunakan
JsonResponse
seperti yang ditunjukkan dalam jawaban SO ini seperti:sumber
Baru di django 1.7
Anda bisa menggunakan objek JsonResponse .
dari dokumen:
sumber
ensure_ascii
dan saya belum menemukan cara untuk menimpanya. Membuat pertanyaan baru untuk ini: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(memerlukan Django 1.9 atau lebih baru)Saya menggunakan ini, itu berfungsi dengan baik.
Alternatif:
Dalam Django 1.7 objek JsonResponse telah ditambahkan ke kerangka Django itu sendiri yang membuat tugas ini lebih mudah:
sumber
from django.utils import simplejson
ini untuk kompatibilitas ke belakang.JsonResponse(status=404, data={'status':'false','message':message})
Sejak Django 1.7 Anda memiliki JsonResponse standar yang persis seperti yang Anda butuhkan:
Anda bahkan tidak perlu json.dump array Anda.
sumber
Dan dalam tampilan:
sumber
Bagi mereka yang menggunakan Django 1.7+
dokumen resmi
sumber
Anda akan ingin menggunakan serializer django untuk membantu dengan hal-hal unicode:
sumber
Dengan tampilan berbasis Django Class Anda dapat menulis:
dan dengan Django-Rest-Framework Anda dapat menulis:
sumber
Sangat nyaman dengan Django versi 1.7 atau lebih tinggi karena Anda memiliki kelas JsonResponse, yang merupakan subkelas dari HttpResponse.
Untuk versi Django yang lebih lama, Anda harus menggunakan objek HttpResponse.
sumber
Bagaimana cara menggunakan mesin aplikasi google dengan ajax (json)?
Kode Javascript dengan JQuery:
Kode Python
sumber
Ini adalah versi pilihan saya menggunakan tampilan berbasis kelas. Cukup subkelas Tampilan dasar dan ganti metode get () -.
sumber
Kode Django
views.py
:Kode HTML
view.html
:sumber
Impor ini dulu:
Jika Anda sudah memiliki JSON:
Jika Anda mendapatkan JSON dari permintaan HTTP lain:
sumber
Gunakan JsonResponse
sumber
Dalam Tampilan gunakan ini:
untuk mendapatkan pesan validasi tanpa html
sumber