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响应。