Javascript JS更改django中的会话时出错

Javascript JS更改django中的会话时出错,javascript,django,session,Javascript,Django,Session,我不确定这是关于django的,而是关于javascript和浏览器的 我的看法是: def set_lang(request, lang): request.session['lang'] = lang # request.session.modified = True # optional, to be pretty sure # request.session.save() # the same return HttpResponse('ok') 在html

我不确定这是关于django的,而是关于javascript和浏览器的

我的看法是:

def set_lang(request, lang):
  request.session['lang'] = lang   

  # request.session.modified = True  # optional, to be pretty sure
  # request.session.save()  # the same

  return HttpResponse('ok')
在html中,在js中:

$.post('/set_lang', {'lang', 'EN'});   # it change session and works
location.reload()
location.reload()时,django会话被“回滚”到以前的状态

在chrome上,当我在location.reload之前在js(1sec)中添加自己的sleep方法时,它可以工作 无论如何,firefox上都存在问题

除了第一节课,我不使用cookies。 我尝试清理浏览器缓存、会话,但没有成功。 我可以在不同的浏览器版本上重复这一点

我有解决办法,但我很好奇发生了什么事

当我从js
location.reload()
,然后执行POST/GET请求时,将通过正确的会话正常处理

F5刷新
set\u lang之后也始终有效(会话已正确更改)


我比较了
location.reload
F5 refresh
之间的http头,它们是相同的。

看起来像
location.reload
不允许
$。post

$.post(url, data);
// sleep(2000) // own func with timeout works only in chrome for me
location.reload();
我问自己,发帖是否有足够的时间发送并找到解决方案

当我将代码更改为:

$.post(url, data).done(function(data{window.location.reload();})

它现在可以在每个浏览器中工作:)

当您执行
返回HttpResponse('ok')
时,它是否会丢失上下文?我将尝试
返回HttpResponse(request.session)
并查看它打印的内容no,set_lang工作,我可以返回更改的会话,会话在下一个请求中丢失(
location.reload()
,并且仅使用此选项)