I am trying to implement a lengthy poll in my Spring-MVC web application , but it freezes my browser and another request after 4-5 continues the AJAX requests. I have no idea what is going on here - this is my corresponding code.
Controller Method: (server side): -
@Asynchronous @RequestMapping("/notify") public @ResponseBody Events notifyEvent(HttpServletRequest request) { Events events = null; try { events = (Events) request.getSession(false).getServletContext().getAttribute("events"); System.out.println("Request Came from" + ((com.hcdc.coedp.safe.domain.User) request.getSession(false).getAttribute(Constants.KEY_LOGGED_IN_USER)).getLoginId()); if (!events.getTypeOfEvents().isEmpty()) { System.out.println("Removing older entries"); events.getTypeOfEvents().clear(); } while (!events.isHappend()) { //Waiting for event to happen. } events = Events.getInstance(); events.setHappend(false); request.getSession(false).getServletContext().setAttribute("events", events); }catch (Exception e) { e.printStackTrace(); } return events; }
Long polling script (client side): -
$(document).ready(function() { $.ajaxSetup({ async:true//set a global ajax requests as asynchronus }); alert('Handler for .onload() called.'); waitForMsg(); }); function waitForMsg(){ xhr= $.ajax({ type: "POST", url: '<%=request.getContextPath()%>/notification/notify', async: true, /* If set to non-async, browser shows page as "Loading.."*/ cache: false, timeout:50000, /* Timeout in ms */ global:false, success: function(data){ /* called when request to notifier completes */ /* Doing smthing with response **/ setTimeout( waitForMsg, /* Request next message */ 1000 /* ..after 1 seconds */ ); }, error: function(XMLHttpRequest, textStatus, errorThrown){ addmsg("error", textStatus + " (" + errorThrown + ")"); setTimeout( waitForMsg, /* Try again after.. */ 15000); /* milliseconds (15seconds) */ } }); };
UPDATE:
function updateFeed(event, data) { var f=eval(data); alert(f.typeOfEvents.length); } function catchAll(event, data, type) { console.log(data); alert("error"); console.log(type); } $.comet.connect('<%=request.getContextPath()%>/notification/notify'); $(document).bind('feed.comet', updateFeed); $(document).bind('.comet', catchAll);
No warning popup .:(
Dangling piyush
source share