2012-04-30 8 views
0

私のAjaxコードでやりたいことは、リクエストで返されたHTMLステータスコードをチェックすることです(リンクがある404を検索しています)。私は次のコードを書いた:ajaxを使用してリンクステータスコードをチェックするjQuery同じ起点ポリシーの問題

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

ここで、 "リンク"は別のサイトの画像URLへのリンクです。私は同じ原産地政策のために、私は実際に他のサイトへのリクエストをすることはできませんが、私がチェックしたいのは返品ステータスであれば、これを行うためのいくつかの例外があることを知っていますか?

+0

あなたが画像を要求するために、AJAX要求を使用しているのか? – Tejs

+0

画像のURLだけです。たとえば、次のようなものです。[link](http://www.lulus.com/images/large/newbMNCgmd40413jredB.jpg) – jrubins

答えて

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); 
     }); 
} 
1

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

あなたはこのような何か行うことができる必要があります:基本的に

http://jsfiddle.net/GL9eU/

、soemthingがロードされてかどうかを決定するためにjQueryの負荷とエラーハンドラを使用します。

関連する問題