2

我需要一个检查文件是否存在的全局函数。我需要为几种方法重用该函数,所以我只希望它返回 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>');

    });
   });

我怎样才能使这项工作?

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 回答