Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest和Q_Javascript_Angularjs_Xmlhttprequest_Angular Promise - Fatal编程技术网

Javascript XMLHttpRequest和Q

Javascript XMLHttpRequest和Q,javascript,angularjs,xmlhttprequest,angular-promise,Javascript,Angularjs,Xmlhttprequest,Angular Promise,我使用的是angular,在包装XMLHttpRequest时遇到了问题,价格为$q 我还使用offline.js库检查用户是否在线。向fav.ico发出ajax请求后,它会将var“status”的状态更改为down\up。它在离线调用后进行ajax调用。check() Offline.check()返回要包装为$q的XMLHttpRequest,并承诺在获取结果后使用它 我试过: $q( Offline.check() ).then(function(response){ cons

我使用的是angular,在包装XMLHttpRequest时遇到了问题,价格为$q

我还使用offline.js库检查用户是否在线。向fav.ico发出ajax请求后,它会将var“status”的状态更改为down\up。它在离线调用后进行ajax调用。check()

Offline.check()返回要包装为$q的XMLHttpRequest,并承诺在获取结果后使用它

我试过:

 $q( Offline.check() ).then(function(response){
    console.log(response);
 });
但得到错误:$q:norslvr 没有传递给$Q的解析器函数

offline.js的有趣部分

   Offline.check = function() {
    Offline.trigger('checking');
    return Offline.checks['xhr']();
   };

   Offline.checks.xhr = function() {
    var e, xhr;
    xhr = new XMLHttpRequest;
    xhr.offline = false;
    xhr.open('HEAD', Offline.getOption('checks.xhr.url'), true);
    if (xhr.timeout != null) {
        xhr.timeout = Offline.getOption('checks.xhr.timeout');
    }
    checkXHR(xhr, Offline.markUp, Offline.markDown);
    try {
        xhr.send();
    } catch (_error) {
        e = _error;
        Offline.markDown();
    }
    return xhr;
};

checkXHR = function(xhr, onUp, onDown) {
    var checkStatus, _onerror, _onload, _onreadystatechange, _ontimeout;
    checkStatus = function() {
        if (xhr.status && xhr.status < 12000) {
            return onUp();
        } else {
            return onDown();
        }
    };
    if (xhr.onprogress === null) {
        _onerror = xhr.onerror;
        xhr.onerror = function() {
            onDown();
            return typeof _onerror === "function" ? _onerror.apply(null, arguments) : void 0;
        };
        _ontimeout = xhr.ontimeout;
        xhr.ontimeout = function() {
            onDown();
            return typeof _ontimeout === "function" ? _ontimeout.apply(null, arguments) : void 0;
        };
        _onload = xhr.onload;
        return xhr.onload = function() {
            checkStatus();
            return typeof _onload === "function" ? _onload.apply(null, arguments) : void 0;
        };
    } else {
        _onreadystatechange = xhr.onreadystatechange;
        return xhr.onreadystatechange = function() {
            if (xhr.readyState === 4) {
                checkStatus();
            } else if (xhr.readyState === 0) {
                onDown();
            }
            return typeof _onreadystatechange === "function" ? _onreadystatechange.apply(null, arguments) : void 0;
        };
    }
};
Offline.check=function(){
Offline.trigger('checking');
离线返回。检查['xhr']();
};
Offline.checks.xhr=函数(){
变量e,xhr;
xhr=新的XMLHttpRequest;
xhr.offline=false;
open('HEAD',Offline.getOption('checks.xhr.url'),true);
如果(xhr.timeout!=null){
xhr.timeout=Offline.getOption('checks.xhr.timeout');
}
检查xhr(xhr,Offline.markUp,Offline.markDown);
试一试{
xhr.send();
}捕获(_错误){
e=_错误;
Offline.markDown();
}
返回xhr;
};
checkXHR=函数(xhr、onUp、onDown){
var检查状态、\u onerror、\u onload、\u onreadystatechange、\u ontimeout;
checkStatus=函数(){
如果(xhr.status&&xhr.status<12000){
返回onUp();
}否则{
返回onDown();
}
};
if(xhr.onprogress==null){
_onerror=xhr.onerror;
xhr.onerror=函数(){
onDown();
返回类型为_onerror==“函数”?\u onerror.apply(null,参数):void 0;
};
_ontimeout=xhr.ontimeout;
xhr.ontimeout=函数(){
onDown();
返回类型为_-ontimeout==“函数”?\u-ontimeout.apply(null,参数):void 0;
};
_onload=xhr.onload;
返回xhr.onload=function(){
检查状态();
返回类型为_onload==“function”?_onload.apply(null,参数):void 0;
};
}否则{
_onreadystatechange=xhr.onreadystatechange;
返回xhr.onreadystatechange=function(){
if(xhr.readyState==4){
检查状态();
}else if(xhr.readyState==0){
onDown();
}
返回类型为_onreadystatechange==“函数”?\u onreadystatechange.apply(null,参数):void 0;
};
}
};

为什么不直接使用
$http
?我无法编辑offline.js库的可能副本,但我需要它,所以我需要另一个解决方案。你说“你需要它”是什么意思?显然,你需要一些不同的东西。为什么你不能简单地用一个编辑过的版本来替换它(例如,
Offline.checks.xhr
返回一个承诺)?因为在外部库中进行黑客攻击是一种不好的做法,当然我可以提出pull请求,并希望它对某人有用。