मैं अपने Spring-MVC Web App में लंबे मतदान को लागू करने की कोशिश कर रहा हूं लेकिन यह मेरे ब्राउज़र को फ्रीज करता है और 4-5 के बाद अन्य अनुरोध AJAX अनुरोध जारी रखता है। मेरे पास कोई संकेत नहीं है कि यहां मेरा प्रासंगिक कोड है ।लंबे मतदान से ब्राउज़र को फ्रीज किया जाता है और अन्य AJAX अनुरोध को अवरुद्ध करता है
नियंत्रक विधि: (सर्वर साइड): -
@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;
}
लंबे समय से मतदान लिपि (क्लाइंट साइड): -
$(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) */
}
});
};
अद्यतन:
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);
न तो अलर्ट बॉक्स पॉप अप .. :(
मैं तुम्हें setTimeout बजाय setInterval उपयोग कर रहे हैं लगता है कि जरूरत नहीं है। जांचें [यह] (http://stackoverflow.com/questions/2696692/setinterval-vs-settimeout) – bhb
मुझे लगता है कि इसे ठंडा करने की समस्या बिल्कुल सही नहीं है क्योंकि मैं बार-बार बार-बार विधि को कॉल करना चाहता हूं सफलता या त्रुटि)। –
क्या आपको अपने फायरबग में कोई समस्या/त्रुटि दिखाई देती है। यदि सर्वर से आने वाला डेटा बहुत बड़ा है, तो यह ब्राउज़र को फ्रीज कर सकता है। – bhb