我正在使用django-dajaxice-ng
包(django-dajaxice
fork for Django
1.5 及更高版本,因为我使用Django 1.5.4
),我有这个奇怪的问题。
有时回调函数会被调用两次甚至更多。
简单用法:
...
{% load dajaxice_templatetags %}
...
{% dajaxice_js_import %}
<script>
function update_chat(data) {
messages = eval(data.messages);
howmany=messages.length;
if (howmany>0)
console.log('called');
for (i=0;i<howmany;i++) {
M=messages[i];
console.log(M.msg,M.sent);
};
}
setInterval(function() {
Dajaxice.myapp.receiveChat(update_chat,{'userID': {{otheruser.id}} });
},2000);
</script>
并在myapp/ajax.py
:
def receiveChat(request,userID):
# find new messages from userID and mark them as READ.
return json.dumps({'messages':serialized_messages})
这是控制台日志:
called
"Message" "16:09:28"
called
"Message" "16:09:28"
如您所见,有时(实际上经常)update_chat
被触发 2 或 3 次。
我百分百确定:
- ajax 函数 receiveChat 被调用一次
- 显示两次的消息被存储一次。
我定义serialized_messages = json.dumps(messages)
, 是messages
一个字典列表。
结果是这样的:
'[{"msg": "Message", "sent": "16:09:28"}]'
在这种情况下,只有一条消息,但也适用于多条消息。
我不得不做这个双重序列化(另一个是 in return
),因为显然 dajaxice 只接受 dict 作为承认的返回值。
任何人也有这种行为?有什么线索吗?
编辑
我正在使用neo4django
which uses neo4j-rest-client
,我必须在模型上执行 .save() ,并且只注意到保存我遇到了问题,可能是因为另一个 HTTP 请求?
编辑 2
这不是dajaxice 问题,切换到 ajax$.get()
会得到相同的结果,但我真的想不通。似乎并非所有浏览器都在这样做,Chrome 确实如此。