0

我发现了很多与使用 JavaScript setInterval() 函数相关的问题,并找到了答案并实现了它们,但我的运气不好,没有一个可以成功。我可能会犯一些愚蠢的错误,但我现在无法找到它。以下是我的代码片段。

$.ajax({
url: "https://api.dropbox.com/1/oauth/request_token",

data:`{"oauth_version":"1.0","oauth_signature_method":"PLAINTEXT","oauth_consumer_key":"consumer_key","oauth_signature":"signature&"}`,
    type: 'POST',
    async: false,
    cache: false,
    dataType: 'text', 
    contentType: "application/x-www-form-urlencoded",
    processData: true,
success: function(requestInfo)
{
        console.log("requestInfo: "+requestInfo);
    requestInfo = "http://localhost/?"+requestInfo;

    var oauth_request_token = processQueryStringData(requestInfo, 'oauth_token'); //a regex function that parses oauth_token from requestInfo
    var oauth_request_token_secret = processQueryStringData(requestInfo, 'oauth_token_secret');//a regex function that parses oauth_token_secret from requestInfo
    console.log("oauth_token_secret: "+oauth_request_token_secret);
    console.log("oauth_request_token: "+oauth_request_token);

    var url = "<url-to-redirect to dropbox alongwith callback url>";
    var win         =   window.open(url, 'DropBox Auth', 'width=800, height=600');  


var pollTimer   =   window.setInterval(function() { 
try {
        console.log("URL     ===== :   "  + win.document.URL);
        if(**some condition is true**)
        {
            window.clearInterval(pollTimer);
            // some code that i need to execute to get the authorize token and then the access tokens.
        }
    } 
catch(e)
{
}
}, 1000);

});

ajax 返回成功,我得到了 oauth_request_token 和 oauth_request_token_secret。Dropbox 登录页面也会在子窗口中打开。但是 setInterval 没有执行,因为我没有看到console.log("URL ===== : " + win.document.URL); 在控制台上。

此外,在阅读了一些答案之后,我创建了一个名为event的函数,我将代码从 setInterval 回调函数中放置在其中并调用该函数,例如,

var pollTimer   =   window.setInterval(event,1000); 

这时候pollTimer是全局的。另外,我只看到了一次log语句,然后刷新了html页面。我无法理解我哪里出错了。可能碰巧是一个愚蠢的错误,但无法弄清楚。请帮忙。

注意:此代码位于 .js 文件中的一个函数中,该文件包含在 html 文件中。

4

1 回答 1

0

事情就是这样。当您在 setInterval 中运行函数时,即使您在 ajax 方法中调用 setInterval,它也是完全不同的上下文。所以我建议你先检查* some condition is true *声明。

于 2013-05-31T13:55:04.683 回答