0

django-dajaxice-ngパッケージ ( django-dajaxicefork を使用しているため、 Django1.5 以降ではfork Django 1.5.4) を使用していますが、この奇妙な問題があります。
コールバック関数が 2 回以上呼び出されることがあります。
簡単な使い方:

...
{% 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 回トリガーされることがあります。
私は 100% 確信しています:

  • ajax 関数 receiveChat が 1 回呼び出されます
  • 2 回表示されたメッセージは 1 回保存されます。

辞書のリストであるserialized_messages = json.dumps(messages)を定義します。 結果は次のようになります。 messages

'[{"msg": "Message", "sent": "16:09:28"}]'

この場合、メッセージは 1 つだけですが、複数のメッセージでも同様に機能します。

returnどうやら dajaxice は許可された戻り値として dict のみを受け入れるため、この二重シリアライゼーションを行う必要がありました (もう 1 つは にあります)。

この行動も取った人はいますか?どんな手掛かり?

EDIT 私はneo4djangowhich uses を使用neo4j-rest-clientしています。モデルで .save() を実行する必要があり、おそらく別の HTTP 要求が原因で、その保存でのみ問題が発生したことに気付きますか?

EDIT 2 dajaxice の問題ではありません。ajax に切り替えて$.get()も同じ結果が得られますが、実際にはわかりません。すべてのブラウザがそうしているわけではないようですが、Chrome はそうです。

4

0 に答える 0