0

サーバーに毎秒ajax(jquery)リクエストを送信するアプリ(struts2 + sprin + glassfish3.1.2)があります。特定の条件が満たされた場合、私のjsは私を他のページにリダイレクトします。そうでない場合、私は何もしません。
長期間(リダイレクトなしで数時間)経過すると、ブラウザが応答しなくなったり、リクエストの実行に非常に長い時間がかかったりするようです。
これが発生した場合、Xからブラウザーを閉じて再度開くと、すべて問題がないことを説明します。テスト環境でこの問題を再現することはできませんでしたが、本番環境でこの問題が発生しているようです:(。

アイデアはありますか?

私はajax呼び出しにJquery(struts2-jquery-plugin3.3.0)を使用し、コードの一部を添付します:
このメソッドは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 に答える