现在,如果这不是一个奇怪的问题,我不知道什么才是。
但问题是:我的“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 的长度,而不是使用标志。
关于jquery - 如何减慢 jQuery 的 Uploadify 插件脚本速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3063233/