现在,如果这不是一个奇怪的问题,我不知道这是什么。
但这是问题所在:我的“ onSelect”选项中有一个功能(必须通过AJAX收集数据),我的“ onComplete”选项中有一个功能,该功能基于数据“ onSelect”处理刚上传的文件集。
但是,对于非常小的文件,“ onSelect”尚未完成上传,并且“ onComplete”失败,因为它缺少必要的数据。较大的文件可以正常工作。
因此,我正在寻找一种方法来停止文件的上传。为了让它仅在onSelect中的函数完成获取必要数据之后才启动。
有任何想法吗?
这是onSelect触发的函数的示例:
var foo = new Array();
function checkDB( event, queueID , fileObj )
{
$.post( ajax_folder + 'fetchData' ,
{
ref: "someValue"
} ,
function( data ){
foo[ queueID ] = data.result;
} ,
'json' );
return true;
}
最佳答案
我一般都同意彼得的观点,您应该尝试更优雅地参与这些活动。但是,您可以(可能应该)将该代码提取到一个函数中,并保留一个标志来告知您是否曾经被调用过。像这样:
var foo = new Array();
var flag = false;
function checkDB()
{
$.post( ajax_folder + 'fetchData' ,
{
ref: "someValue"
} ,
function( data ){
foo[ queueID ] = data.result;
flag = true;
} ,
'json' );
return true;
}
function onSelectHandler(event, queueID , fileObj){
checkDB();
}
function someOnCompleteStuff(){
if(flag){
//do oncomplete stuff
}else{
// try again later
setTimeout(someOnCompleteStuff,500);
}
}
function onCompleteHandler(event, queueID , fileObj){
someOnCompleteStuff();
}
当然,您始终可以检查foo的长度,而不用使用标志。