28

内部で使用するPDFファイルのコレクションにアクセスするための小さなJavascript/jQueryプログラムを開発しました。また、ファイルが実際に存在する場合は、PDFファイルの情報divを強調表示したいと思いました。

ファイルへのリンクが壊れているかどうかをプログラムで判断する方法はありますか?もしそうなら、どのように?

ガイドや提案が適切です。

4

6 に答える 6

59

ファイルが同じドメインにある場合、Alex Sextonが言ったように、AJAX を使用してそれらの存在をテストできます。ただし、このGETメソッドHEADは使用せず、HTTP ステータスの期待値 (200 または 400 未満) を確認するだけにしてください。

関連する質問から提供される簡単な方法を次に示します。

function urlExists(url, callback) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
      callback(xhr.status < 400);
    }
  };
  xhr.open('HEAD', url);
  xhr.send();
}

urlExists(someUrl, function(exists) {
    console.log('"%s" exists?', someUrl, exists);
});
于 2009-10-19T23:11:42.093 に答える
3

問題は、JavaScript のオリジン ポリシーが同じであるため、別のドメインからコンテンツを取得できないことです。これは賛成票を投じても変わりません(17票について疑問に思っています)。外部リンクに必要かと思いますので.jsだけでは無理です…

于 2012-05-15T22:23:32.797 に答える
1

ファイルが外部の Web サイトにない場合は、各ファイルに対して ajax リクエストを作成してみてください。失敗として戻ってきた場合は、それが存在しないことがわかります。それ以外の場合、それが完了したり、返されるのに所定のしきい値よりも時間がかかったりした場合は、存在すると推測できます。常に完璧というわけではありませんが、一般的に「filenotfound」リクエストは迅速です。

var threshold   = 500,
    successFunc = function(){ console.log('It exists!'); };

var myXHR = $.ajax({
  url: $('#checkme').attr('href'),
  type: 'text',
  method: 'get',
  error: function() {
    console.log('file does not exist');
  },
  success: successFunc
});

setTimeout(function(){
  myXHR.abort();
  successFunc();
}, threshold);
于 2009-10-19T22:20:05.193 に答える
0

あなたはそれをすることができます$.ajax。ファイルが存在しない場合、404 エラーが発生し、エラー コールバックで (UI に関して) 必要なことを実行できます。リクエストをトリガーする方法はあなた次第です(タイマー?)もちろん、サーバー側のコーディングも実行できる場合は、単一のAJAXリクエストを実行できます-ディレクトリをスキャンして、JSONなどの結果を返します。

于 2009-10-19T22:22:11.293 に答える