2011-11-13 18 views
9

私は、ユーザーの操作に応じてサーバーサイドで生成される多数のイメージを持つページを持っています。イメージが正常に読み込まれると、私は満足していますが、サーバーにエラーが発生した場合、エラーが発生したことに応じて動作する必要があります。例えばHTTPステータスコードを取得する方法<img>タグ

  • 500のコード:このようなものを行います。
  • 503コード:その原料

などを行います。

私の質問:「img」タグオンエラーイベントハンドラ内でステータスコードを取得する方法はありますか?

+1

なぜこのような問題をクライアントで処理するのですか?なぜサーバーはこれらのイメージを適切に扱うのですか? – Raynos

+2

@Raynos状況は次のようなものです。画像はサーバ上でダイナミックに作成されますが、時間がかかります。つまり、ブラウザから要求されたときには準備できないことがあります。同時に、サーバー側で重大なエラーが発生する可能性があり、画像がまったく表示されません。だから、httpステータスに基づいて、私はもう一度イメージのためにサーバーに尋ねるか、エラーについてユーザーに通知しなければならない。 –

+0

いいえ、まだ間違っています。あなたはHTTPサーバを持っています。画像の受信GET要求を受け取ったら、準備ができているのを待つことができます。重大なエラーが発生した場合は、「重大なエラー」イメージを返すことができます。 – Raynos

答えて

8

いいえ、JavaScriptのimgタグによって行われたリクエストからHTTPステータスを取得する方法はありません。

firefoxプラグイン、chrome/safari拡張機能を作成することができます。

代わりに、AJAXを使用して画像を読み込みます(imgタグを使用しない)。 AjaxリクエストからHTTPステータスコードを取得できます。

たとえば、jQueryを使って:

+0

プラグインは使用できません。 AJAXはうまくいくようですが、AJAXをどのようなデータで取得する必要がありますか?画像データを取得することはできますが、img要素の作成には使用できません。 –

+0

ほとんどの場合、データURLとして送信する必要があります。おそらく、サーバー側でデータURLを生成できる何らかの種類のライブラリを見つける必要があります。その後、それらが到着すると、imgのsrcをデータURLに設定するだけです。これにより、イメージの読み込みにかなりのオーバーヘッドが追加されます。本当の解決策はおそらくサーバーが常に正常に画像を送信するように修正することです。 –

+0

AJAXは、あなたのwanna-load-imagesが外部ドメインに置かれている場合には適切な代替ではありません。 2016年にこの問題について何か新しいことがありますか? – Fusion

-4

あなたは画像上のEventListenerを追加する必要があります。この方法でHTTPステータスを確認することができません

$('#your_image') 
    .error(function(e) { 
     //add your unhappy code here 

     //unbind if needed 
     $(this).unbind('error'); 
    }) 
    .load(function(e) { 
     //add your happy code here 

     //unbind if needed 
     $(this).unbind('load'); 
    }) 
    ; 
+1

eventDataオブジェクト "e"内にステータスコードがありますか? –

+0

[API for '。エラーが発生する前にイベントハンドラ**を** **添付しておく必要があります。 **ハンドラーを添付した後** src属性を設定します。 " (**強調**私の)。 –

+10

ちょうどそれにいくつかのjQueryを投げる、確かにそれは問題を解決します! – Raynos

4

。しかし、画像がロードされたかどうかは、naturalWidthプロパティを使って確認できます。

if (img.naturalWidth === 0) { 
    // do sth 
} 

希望します。

+2

このページを読む人は、naturalWidthプロパティはすべてのブラウザでサポートされているわけではありません。このプロパティーも非常に面倒です - イメージがロードされた後でそれを読み取ろうとするべきです。 (http://stackoverflow.com/questions/1645166/image-naturalwidth-return-zero) 私は役立つことを望む。 :) – Axle

+0

@Axleあなたは'09からの投稿を参照しています。今はすべての最新のブラウザのバージョンで動作します。 –

+0

私は以前のブラウザ(IE 7やIE 8など)をサポートする必要があるどこかで働くことがあります。似たような運命に苦しんでいる人もいると確信しています。 私を信じて、「うーん、彼らは壊れた道具を更新してください!」と叫びました。どこにも私を連れて来なかった。 :P – Axle

関連する問題