django-dajaxice-ng
パッケージ ( django-dajaxice
fork を使用しているため、 Django
1.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
私はneo4django
which uses を使用neo4j-rest-client
しています。モデルで .save() を実行する必要があり、おそらく別の HTTP 要求が原因で、その保存でのみ問題が発生したことに気付きますか?
EDIT 2 dajaxice
の問題ではありません。ajax に切り替えて$.get()
も同じ結果が得られますが、実際にはわかりません。すべてのブラウザがそうしているわけではないようですが、Chrome はそうです。