我需要一个检查文件是否存在的全局函数。我需要为多个方法重用该函数,所以我只想让它返回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>');
});
});
我该如何做到这一点?
答案 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上的文档。