微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

跨域AJAXgetJSON与长轮询?

如何解决跨域AJAXgetJSON与长轮询?

| 我想知道是否可以使用$ .getJSON进行长时间轮询,以及正确的前端和后端逻辑是什么。 到目前为止,我已经提出了这个建议,但是由于我非常确定错误和/或缺少逻辑,因此尚未对其进行测试。 这是JS:
    function lpOnComplete(data) {
        console.log(data);
        if (!data.success) {
            lpStart();
        }
        else {
            alert(\"Works!\");
        }
    };

    function lpStart() {
        $.getJSON(\"http://path.to.my.URL.PHP?jsoncall=?\",function(data) {
            // What happens when no data is returned
            // This is more than likely since there 
            // is no fall back in the PHP.
            lpOnComplete(data);
        });
    };
PHP
    $time = time();
    while((time() - $time) < 30) {
        // only returns data when it\'s new.
        $data = checkCode();

        // What would be the proper way to break out
        // and send back $data[\'success\'] = false
        // so the JS loop can continue?
        if(!empty($data)) {
            echo $_GET[\"jsoncall\"] . \"(\" . json_encode($data) . \")\";
            break;
        }
        usleep(25000);
    }
    

解决方法

从那里到那里,JavaScript将向服务器发出多个请求,并且每个请求都将启动无限循环,并且永无止境。我建议类似:js:
$.getJSON(\"http://my.site/startAsyncWork.php\",null,function(data){
    waitUntilServerDone(data.token,function(response){
        alert(\"done\");
    });
});

function waitUntilServerDone(token,doneCallback){
    $.getJSON(\"http://my.site/checkIfWorkIsDone.php\",{\"token\": token},function(response){
        if(response.isDone){
            doneCallback(response);
        }
        else{
            setTimeout(function(){
                waitUntilServerDone(token,doneCallback);
            },1000);
        }
    });
}
我不知道php,所以我不会为此编写示例代码,但基本上,startAsycWork.php组成了一个与请求关联的随机令牌。然后,它会产生一个执行所有所需工作的线程,并将令牌返回给响应。 工作线程完成后,它将工作结果写到token.dat之类的文件中(或将其放入缓存或其他内容)。 checkIfWorkIsDone.php检查token.dat是否存在,如果不存在,则返回false,否则,返回内容。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。