Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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
$(此)/。每个帮助:jQuery 404通过YQL检查_Jquery - Fatal编程技术网

$(此)/。每个帮助:jQuery 404通过YQL检查

$(此)/。每个帮助:jQuery 404通过YQL检查,jquery,Jquery,我试图检查一个链接(我知道50%的时间不可用,但在随机时间),看看它是否返回200 HTTP状态码。如果是这样,我想将链接上的类从脱机更改为联机 所需的过程:获取指向ip地址的所有链接,使其类脱机,对于每个链接,向YQL发出一个请求,如果收到200个代码,则将类更改为联机 目前我有: var streams = $('article a[href^="http://65"]'); streams.addClass("offline"); streams.each(function (){

我试图检查一个链接(我知道50%的时间不可用,但在随机时间),看看它是否返回200 HTTP状态码。如果是这样,我想将链接上的类从脱机更改为联机

所需的过程:获取指向ip地址的所有链接,使其类脱机,对于每个链接,向YQL发出一个请求,如果收到200个代码,则将类更改为联机

目前我有:

var streams = $('article a[href^="http://65"]');
streams.addClass("offline");
streams.each(function (){
    destination = $(this).attr("href");
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=use%20%22store%3A%2F%2FtbYorcb2jIkiHPcRbkpSUG%22%20as%20HTTPStatus2%3B%20select%20status%20from%20HTTPStatus2%20where%20url%3D%22"+ encodeURIComponent(destination) +"%22&format=json&callback=",
        function(data){
            var httpstatus = data.query.results.result.status;
            if(httpstatus == 200){
                console.log('If = 200');
                changeStatus();
            }
        }
    );
    function changeStatus(){
        console.log('changeStatus called');
        $(this).removeClass("offline").addClass("online");
    };
    //$(this).removeClass("offline").addClass("online");
});
除了changeStatus函数之外,这一切似乎都起作用。我认为,通过将它放在AJAX请求之外的一个单独的函数中,它会起作用,但事实并非如此。 问题似乎是
$(this)
引用不正确。但是,如果我将相同的语句放在函数之外(如上面代码中注释的),它就可以正常工作


任何帮助/指针都将不胜感激。

您应该重构代码,将“changeStatus()”方法的代码直接包含在回调闭包中,以维护范围链

    var streams = $('article a[href^="http://65"]');
streams.addClass("offline");
streams.each(function (){
    destination = $(this).attr("href");
    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=use%20%22store%3A%2F%2FtbYorcb2jIkiHPcRbkpSUG%22%20as%20HTTPStatus2%3B%20select%20status%20from%20HTTPStatus2%20where%20url%3D%22"+ encodeURIComponent(destination) +"%22&format=json&callback=",
        function(data){
            var httpstatus = data.query.results.result.status;
            if(httpstatus == 200){
                console.log('If = 200');
                console.log('changeStatus called');
                $(this).removeClass("offline").addClass("online");
            }
        }
    );

    //$(this).removeClass("offline").addClass("online");
});
在changeStatus函数中使用$(this)时,this标识符指的是changeStatus函数对象,而不是正在迭代的当前流。您需要传入对象,或将changeStatus移动到另一个函数中

streams.each(function (){
    var that = $(this),
        destination = that.attr("href");

    $.getJSON("http://query.yahooapis.com/v1/public/yql?q=use%20%22store%3A%2F%2FtbYorcb2jIkiHPcRbkpSUG%22%20as%20HTTPStatus2%3B%20select%20status%20from%20HTTPStatus2%20where%20url%3D%22"+ encodeURIComponent(destination) +"%22&format=json&callback=",
        function(data){
            var httpstatus = data.query.results.result.status;
            if(httpstatus == 200){
                console.log('If = 200');
                changeStatus();
            }
        }
    );
    function changeStatus(){
        console.log('changeStatus called');
        that.removeClass("offline").addClass("online");
    };
});
您的目标变量上也缺少一个“var”


编辑:关于“this”关键字的一些帮助:

“this”在回调函数中没有任何意义。回调事件发生在each循环的范围之外。谢谢Splash-X-我本来以为是这样的,但不知道如何避开它(也不可能正确地表达出来!)。谢谢John。我本来是这样开始的,但发现没用。。。如果我添加
console.log($(this))它显示$(这)仍然是指
get
请求。谢谢jbabey-当我在第二行末尾发现你的轻微打字错误时,它工作得很好-我相信你是故意把它扔进去的,以确保我不仅仅是复制粘贴我能问问你关于变更状态的事吗?为什么要将
传递给
changeStatus()
?没有它,它似乎工作得很好。我只是想知道。谢谢不需要传递它,因为在changeStatus函数中,“that”变量仍在作用域中。我将编辑我的答案以避免混淆。第二行你指的是什么打字错误?只是a,而不是;-直到我把它整理好,它才起作用。谢谢你的链接,顺便说一句-以前没见过这个网站。你可以用一个“var”关键字用逗号分隔多个变量。不是打字错误。哈-可能知道!你(我!)每天都学点东西。谢谢你的帮助。