0

私の ajax コードでやりたいことは、リクエストによって返される HTML ステータス コードをチェックすることだけです (リンク付きの 404 を検索します)。私は次のコードを書きました:

$.ajax({
    url: link,
    statusCode: {
        404: function() {
            alert("Not found");
        },
        200: function() {
            alert("Found!");
        }
    }
});

ここで、「リンク」は別のサイトの画像 URL へのリンクです。同じオリジン ポリシーのため、実際には他のサイトにリクエストを行うことができないことはわかっていますが、確認したいのが返品ステータスだけである場合、これを行うための例外はありますか?

4

2 に答える 2

1

画像リソースが読み込まれたかどうかを動的に判断しようとしているようです。

あなたはこのようなことをすることができるはずです:

http://jsfiddle.net/GL9eU/

基本的に、jQueryのロードハンドラーとエラーハンドラーを使用して、soemthingがロードされているかどうかを判断します。

于 2012-04-30T18:05:31.040 に答える
1

想定外のことをしようとしているとき、私が使用したい戦略の1つは、ブラウザーで既に機能している場所を見つけて、それをだまして私のために機能させることです。クロスドメインで画像をダウンロードするという点では、ブラウザはすでにこの機能を<img>タグに実装しています。

画像タグは、画像が正常に読み込まれた場合にトラップするために使用できる、読み込まれたDOMイベントをサポートします。

欠点は、サーバーが画像のホットリンクを許可するように構成されているため、返される画像が実際の画像なのか、リダイレクト画像なのかが常にわからないことです。また、リクエストが失敗したかどうかもわかりません。

後者の欠点は、タイマーによって克服できます。タイマーは、おそらく希望するほど堅牢ではありませんが、アプリケーションによっては機能する可能性があります。

これが私があなたにアイデアを与えるために作り上げたいくつかのサンプル(すなわち、テストされていない)コードです...

function isImagePathValid(src, callback) {
   // Setup a timer to catch if it never loads
   var fallback = setTimeout(function() {
       callback(false);
   }, 5000);  // Wait 5 seconds

   // Create a temp <img> tag and wait for it to load
   $('<img style="position:absolute; top:-9999; left:-9999;" src="' + src + '" />')
      .appendTo('body')
      .load(function() {
          clearTimeout(fallback);
          callback(true);
      });
}
于 2012-04-30T18:07:30.870 に答える