我写过一个使用DataTables的Django应用程序。问题是当我从表中删除一行时,它仍然在对nginx / gunicorn运行时显示在表中。但是,当我在Django测试服务器上运行时,它可以正常工作。因此,如果我使用此命令行启动服务器:
python manage.py runserver 192.168.0.1:8000
一切正常。也就是说,我删除了行,表刷新,并且不显示删除的行。
这是HTTP调用的摘要:
// An initial GET command to populate the table
GET /myapp/get_list (returns a list to display)
// I now select a row and delete it which causes this POST to fire
POST /myapp/delete (deletes a row from the list)
// After the POST the code automatically follows up with a GET to refresh the table
GET /myapp/get_list (returns a list to display)
问题是当我使用nginx / gunicorn时,第二个GET调用返回与第一个GET相同的列表,包括我知道已从后端数据库中删除的行。
我不确定这是一个缓存问题,因为这是我从第一个GET获得的响应头:
Date Fri, 23 Dec 2011 15:04:16 GMT
Last-Modified Fri, 23 Dec 2011 15:04:16 GMT
Server nginx/0.7.65
Vary Cookie
Content-Type application/javascript
Cache-Control max-age=0
Expires Fri, 23 Dec 2011 15:04:16 GMT
答案 0 :(得分:1)
通过向服务器发送添加的参数,以便浏览器不缓存调用,也可以解决问题。使用jQuery,您只需使用:
$.ajaxSetup({ cache: false});
否则您必须手动创建参数。通常你创建一个时间戳
var nocache = new Date().getTime();
//send nocache as a parameter so that the browser thinks it's a new call
答案 1 :(得分:1)
您可以使用Django的add_never_cache_headers或never_cache装饰器告诉浏览器不要缓存给定的请求。文档为here。我认为这比在javascript中强制缓存更清晰。
from django.utils.cache import add_never_cache_headers
def your_view(request):
(...)
add_never_cache_headers(response)
return response
from django.views.decorators.cache import never_cache
@never_cache
def your_other_view(request):
(...)
答案 2 :(得分:0)
试试这个
oTable.fnDeleteRow( anSelected, null, true );
和b.t.w您使用的是哪个版本的数据表?
答案 3 :(得分:0)
我通过更改
解决了问题GET / myapp / get_list
到
POST / myapp / get_list
执行此操作后,我不再获得缓存响应。