私は200のHTTPステータスを返すかどうかを見るためにリンクをチェックしようとしています。コード。もしそうなら、リンク上のクラスをオフラインからオンラインに変更したいと思います。
希望のプロセス:IPアドレスを指すすべてのリンクを取得し、それらにクラスを与えます。オフラインで、それぞれに対してYQLへのリクエストを行います。
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)
の参照のようです。しかし、関数の外側に同じステートメントを置くと(上のコードでコメントアウトされているように)、うまく動作します。
どのようなヘルプ/ポインタも大変ありがとうございます。
は、「これは、」コールバック関数の内部では意味を持ちません。コールバックイベントは、各ループの範囲外で発生します。 –
ありがとうSplash-X - 私はそれが事実だと思ったが、それを回避する方法を知らなかった(そしてそれを正しく表現できなかった)。 – phil