0

我正在使用django-dajaxice-ng包(django-dajaxicefork for Django1.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 作为承认的返回值。

任何人也有这种行为?有什么线索吗?

编辑 我正在使用neo4djangowhich uses neo4j-rest-client,我必须在模型上执行 .save() ,并且只注意到保存我遇到了问题,可能是因为另一个 HTTP 请求?

编辑 2不是dajaxice 问题,切换到 ajax$.get()会得到相同的结果,但我真的想不通。似乎并非所有浏览器都在这样做,Chrome 确实如此。

4

0 回答 0