jquery判断一个文件是否存在函数写法的历程

第一次的写法:

function Exists(url)
{    
    $.ajax({
        url: url, 
        type: 'HEAD', 
        error: function () {
            //file not exists 
            console.info("file not exists ");
            return false;
             
        },
        success: function () {
            //file exists 
            console.info("file exists");
            return true;
             
        }
    });
    
}
通过ajax调用的方式,如果没错,则返回true,否则返回false。打算的很好,但是Exists(url)无论在console.info输出file exists还是file not exists的情况下,始终是undefinded。

最后只能归结为$.ajax调用的时候这个return返回值返回不到外部的函数调用。于是进行了修改,修改后的代码如下:

function Exists(url) {
    var isExists;
    $.ajax({
        url: url,
        type: 'HEAD', 
        error: function () {
            //file not exists 
            console.info("file not exists ");
            isExists = 0;
 
        },
        success: function () {
            //file exists 
            console.info("file exists");
            isExists = 1;
 
        }
    });
    console.info("isexists:" + isExists);
    if (isExists == 1) {
        return true;
    }
    else {
        return false;
    }
}
这个写法用文件不存在的url进行测试,浏览器console面板输出如下:

isexists:undefined
 file not exists 

这个写法用文件存在的url进行测试,浏览器console面板输出如下:

isexists:undefined
file exists

仔细查看输出发现先输出isexists,后输出文件是否存在。我们知道程序代码都是顺序执行的,通常意味着应该先输出file exists或file not exists,后输出isexists。出现这个是

什么原因?仔细想想,就知道了,问题出在异步调用。在执行这个函数的时候,异步调用isexists还没有值,导致始终是undefinded。知道了这个再次改写代码为同步调用:

function Exists(url) {
    var isExists;
    $.ajax({
        url: url,
        async:false,
        type: 'HEAD', 
        error: function () {
            //file not exists 
            console.info("file not exists ");
            isExists = 0;
 
        },
        success: function () {
            //file exists 
            console.info("file exists");
            isExists = 1;
 
        }
    });
    console.info("isexists:" + isExists);
    if (isExists == 1) {
        return true;
    }
    else {
        return false;
    }
}
这个时候 function  Exists ( url ) 函数能够根据文件是否存在回归正确的true或false.


既然是异步调用导致的这个问题,我第一次的写法增加同步调用写法是否能得到正确的值呢。增加代码进行测试:

function Exists(url) {
    
    $.ajax({
        url: url,
        async:false,
        type: 'HEAD', 
        error: function () {
            //file not exists 
            console.info("file not exists ");
            return false;
 
        },
        success: function () {
            //file exists 
            console.info("file exists");
            return true;
 
        }
    });
    
}

测试结果 function  Exists ( url )仍然是始终为undefined。

得到两个经验:

其一,如果$.ajax在函数中调用根据结果返回true或false是不可行的

其二,如果函数必须有返回值,则返回值需要在$.ajax外面定义,然后根据$.ajax得到不同的值,并且$.ajax需要使用同步模式,不能使用异步模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值