2

ファイルが存在するかどうかをチェックするグローバル関数が必要です。その関数をいくつかのメソッドで再利用する必要があるので、trueまたはfalseを返すだけです。非同期にしようとしましたが、動作しません。これは機能です:

  function checkIndex(){
      $.ajax({
          url:'upload/_3.fdt',
          type:'HEAD',
          async: false,
          error: function(){
                return false;   
          },
          success: function(){
                return true;
          }
      });
}

これは、checkIndex()を呼び出す関数の1つです。

$(function(){
    $(document).ready( function(){

        if(checkIndex() == false)
            $('#check').html('<td><img src="img/cross.gif" /></td><td>No index present</td>');
        else
            $('#check').html('<td><img src="img/check.gif" /></td><td>Index is present</td>');

    });
   });

どうすればこれを機能させることができますか?

4

2 に答える 2

3

私は ajax 関数から遅延オブジェクトを返し、ajax 関数が失敗したかどうかに基づいて html を挿入します。

function checkIndex(file){
    return $.ajax({
        url : file,
        type:'HEAD'
    });
}

$(function(){
    checkIndex('upload/_3.fdt').done(function() {
        $('#check').html('<td><img src="img/check.gif" /></td><td>Index is present</td>');
    }).fail(function() {
        $('#check').html('<td><img src="img/cross.gif" /></td><td>No index present</td>');     
    });
});

チェックするファイル名を関数に渡すと、非常に再利用可能になります。

于 2013-02-14T16:31:11.077 に答える
0

一般に、 を使用しasync: falseていることに気付いた場合、それは間違っています。

次のように対話できるオブジェクトを$.ajax返すという事実を利用して、この問題を解決できます。Deferred

function checkIndex(){
    return $.ajax({
        url:'upload/_3.fdt',
        type:'HEAD'
    });
}

checkIndex().done(function () {
    $('#check').html('<td><img src="img/check.gif" /></td><td>Index is present</td>');
}).fail(function () {
    $('#check').html('<td><img src="img/cross.gif" /></td><td>No index present</td>');
});

詳細については、jQuery Deferred Objectsに関するドキュメントを参照してください。

于 2013-02-14T16:30:53.880 に答える