1
_setPrintExportCookieInterval: function(/**String*/requestId, /**function*/closePopup) {
    //have the interval autoexpire after some amount of seconds
    var count = 0;
    var intervalMs = 2000;

    var intervalId = self.setInterval(function() {
        var reportCookie = dojo.cookie(requestId);
        console.debug('requestId ' + requestId);
        if(reportCookie || count > 300000) { //5 mins
            //if there's a status failure, don't close the window
            console.debug('reportCookie ' + reportCookie);
            if(reportCookie == undefined){
                console.debug("print/export request returned with undefined status ");
            } else if(reportCookie == "success") {
                closePopup();
            }  else{
                console.debug("print/export request returned with nonstandard status " + reportCookie);
            }
            window.clearInterval(intervalId);
            //delete the cookie
            dojo.cookie(requestId, null, {path: "/", expires: -1});
            //destroy the iframe
            //dojo.destroy(dojo.byId(requestId));
        };
        count+=intervalMs;
    }, intervalMs);

    return intervalId;
},

上記の JavaScript 関数に問題があります。一般に、問題は次の場合があることです。

var reportCookie = dojo.cookie(requestId);

を返しますnullが、ブラウザのデバッグ ツールを見ると、値がsuccess. これは、この関数が呼び出される 10 回に 1 回発生します。dojo.cookie()ときどきID だけで Cookie を検索できない理由はありますか?

4

1 に答える 1

1

Cookie を取得するときは必ずパスを指定してください。そうしないと、デフォルトで現在の場所になります。これにより、ドメイン内の任意のパスから Cookie を取得できます。

dojo.cookie(requestId, null, {path: "/" });

于 2012-10-25T18:13:45.443 に答える