2013-07-24 29 views
0

問題是,如果有新消息,而不是隻發出一次警報,Chrome會以相同的值警告5-8次。相反,這些代碼適用於FF,它只警告一次。我如何修復代碼以支持Chrome。 HTML:Jquery ajax在Chrome中發回多個響應,而在FF中只發送一個響應

setInterval(function() { 
    $.get('/restaurant/get_msg_notification',{},function(data){ 
     alert(data) 
    }) 
}, 1000) 

查看:

def get_msg_notification(request):  
    while True: 
     # check is there any new messages ? 
     msg = Message.objects.filter(receiver = user, notify = False) 
     if(len(msg)==0 and patient<5): 
      time.sleep(5) 
      patient+=1 
     else: 
      break 
    if(len(msg) > 0): 
     data = serializers.serialize('json', msg) 
     msg.update(notify = True) 
     return HttpResponse(data, mimetype="application/json") 
    else: 
     return HttpResponse("") 
+0

現在我嘗試刪除'耐心'變量,因此它不是長時間輪詢。該方法給了我一個正確的結果(只有一次響應)。但是,沒有長時間輪詢,ajax需要每秒發送一次昂貴的請求。 –

+0

找到了長鏈輪詢和從這個鏈接的解決方案的很好的解釋。 http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery –

回答

0

事實上,火狐似乎是不正常的人。請嘗試使用以下代碼代替:

def get_msg_notification(request):  
    while True: 
     # check is there any new messages ? 
     msg = Message.objects.filter(receiver = user, notify = False) 
     if(patient < 5): 
      time.sleep(5) 
      patient+=1 
     else: 
      if (len(msg) != 0): 
       msg.update(notify = True) 
      break 

    data = serializers.serialize('json', msg) 
    return HttpResponse(data, mimetype="application/json") 
+0

我忘了寫,如果條件之外,而循環進入問題。現在我已經把這個條件包含進了這個問題。順便說一下,你爲什麼認爲FF無法正常工作? –