检查文件是否存在,根据消息显示,jQuery

时间:2013-02-14 16:22:47

标签: javascript jquery

我需要一个检查文件是否存在的全局函数。我需要为多个方法重用该函数,所以我只想让它返回true或false。我试图让它异步,但我无法让它工作。这是功能:

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

这是调用checkIndex()

的函数
$(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>');

    });
   });

我该如何做到这一点?

2 个答案:

答案 0 :(得分:3)

我将从ajax函数返回延迟对象,并且只是根据是否插入html ajax函数是否失败:

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

如果您传递文件名以检查该功能,它也是非常可重用的。

答案 1 :(得分: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上的文档。