0

我有一个应用程序(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。
感谢您的快速回复。

4

1 回答 1

1

使用 Firebug 分析您的 Web 应用程序,应该会告诉您挂起的位置。

至于在不刷新页面的情况下执行多个 Ajax 请求,您可能需要某种 ajax 管理库,可以是手写的,也可以免费获得(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);
于 2012-04-15T07:29:47.900 回答