我有一个应用程序(struts2 + sprin + glassfish3.1.2),它每秒向服务器发送一个ajax(jquery)请求。如果满足某些条件,我的js会将我重定向到其他页面,否则我什么都不做
似乎经过很长一段时间(几个小时没有任何重定向)后,浏览器变得没有响应或者需要很长时间来执行请求。
我提到如果发生这种情况,我将从X关闭浏览器并重新打开它一切正常。我没有设法在我的测试环境中复制这个问题,但似乎我在生产中遇到了这个问题:(。
我使用Jquery(struts2-jquery-plugin3.3.0)进行ajax调用,我将附加一些代码:
这种方法每1秒访问一次:
function checkedForAnsweredCalls(){
if (ajaxFinished == 1){
ajaxFinished = 0;
$.getJSON('redirectToTicket.html',
function(data) {
ajaxFinished = 1;
if (data != null){
window.location = data;
}
}
);
}
};
通过这段代码:
<script>
var ajaxFinished = 1;
window.setInterval( "checkedForAnsweredCalls()", 1000 );
</script>
这个ajax代码访问具有json响应类型的struts2动作,因此如果满足某些数据库条件,我会返回一个url。
感谢您的快速回复。
答案 0 :(得分:1)
使用Firebug来分析您的Web应用程序,应该告诉您挂起的位置。
至于在没有页面刷新的情况下执行多个Ajax请求,您可能需要某种类型的ajax-managing库,可以手写或免费提供(prototype.js就是一个例子)。
我使用以下代码为我管理它,不能归功于它,它是我发现谷歌搜索的代码混乱,我做了一些小的改动。
var reqObj_arr = [];
function getXMLObject(index) {
if(reqObj_arr[index]){
return reqObj_arr[index];
}
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP") // For Old Microsoft Browsers
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") // For Microsoft IE 6.0+
} catch (e2) {
xmlHttp = false // No Browser accepts the XMLHTTP Object then false
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest(); //For Mozilla, Opera Browsers
}
reqObj_arr[index] = xmlHttp;
return xmlHttp; // Mandatory Statement returning the ajax object created
}
function ajaxFunction(url, target, params) {
var getdate = new Date(); //Used to prevent caching during ajax call
var xmlhttp = new getXMLObject(target); //xmlhttp holds the ajax object
if(xmlhttp) {
xmlhttp.open("POST",url,true); //calling url using POST method
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
document.getElementById(target).innerHTML = xmlhttp.responseText;
}
else {
alert("Error during AJAX call. Please try again");
}
}
};
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
if(params){
xmlhttp.send(params); // Posting to PHP file
}
else{
xmlhttp.send(); // Posting to PHP file
}
}
}
要使用它,请在页面中添加以下Javascript行
var url = 'URL to the .php file';
var target = 'ID of the element to add retrieved data to';
var params = 'Any other parameters to send';
ajaxFunction(url,target,params);