Ajax:将整数数组发布到Django
我正在使用DataTables 。 我想让用户选择多行并删除它们。 到目前为止,我有它的工作,所以它使用下面的代码删除选择中的第一行。
Ajax代码:
/* Add a click handler for the delete row */ $('#delete').click( function() { /* fnGetSelected returns an array of integers - each int is a db unique id */ var anSelected = fnGetSelected( oTable ); delete_url = '/delete/' + anSelected[0]; $.ajax({ url: delete_url, type: 'GET', }); oTable.fnDeleteRow( anSelected[0] ); fnReloadAjax(); } );
Django代码:
@login_required def delete(request, row_id): item = get_object_or_404(Items, pk=row_id, user=request.user) item.delete()
我怎么能更新这个以将所有行ID传递给Django后端? 我想我需要POST一个anSelected数组,但我不知道该怎么做。 我需要什么Django代码来处理这个整数数组?
你需要使用simplejson.loads
,例如,如果你将anSelected数组作为arr
传递,你会使用类似这样的东西
from django.utils import simplejson array = simplejson.loads(request.POST['arr']) try: ModelName.objects.filter(pk__in=array).delete() except: return HttpResponse(simplejson.dumps({'ok': False})) return HttpResponse(simplejson.dumps({'ok': True}))
并在你的JavaScript中这些东西沿着这些方向:
$.post( '/delete/', {arr: anSelected}, function(data){ if(data.ok){ //Everything went smoothly }else{ //Something failed, you can send extra info from django like the name of the exception thrown if you'd want and display it } } );
你可以尝试这样的东西:
$(function(){ $.post("{% url delete %}", {"ids[]": anSelected}, function(res){ if(res.ok){ // remove rows from your table, maybe :) // oTable.fnDeleteRow(anSelected); }else{ alert(res.errors); } }); })
在服务器上:
@ajax_request def test(request): ids = request.POST.getlist("ids[]") try: Items.objects.filter(id__in=ids).delete() except: return {"ok": False, "errors": "your error"} return {"ok": True}
@ajax_request修饰符来自https://bitbucket.org/offline/django-annoying/wiki/Home ,让你返回json响应。