2

现在,如果这不是一个奇怪的问题,我不知道是什么。

但问题是:我的“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;
}
4

3 回答 3

1

通过重新排序事件来解决它。现在处理发生在“onAllComplete”中,该函数通过 setInterval 检查 Uploadify 上传目录中的图片数量与 Uploadify 注册的上传图片数量相同。一旦两个数字相等,处理就开始了。

于 2010-06-22T05:57:49.697 回答
1

我普遍同意彼得的观点,即你应该尝试更优雅地参与这些事件。但是,您可以(并且可能应该)将该代码提取到一个函数中并保留一个标志,告诉您它之前是否被调用过。像这样的东西:

    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 的长度而不是使用标志。

于 2010-06-22T17:27:18.813 回答
0

如果我理解正确,我认为您可以将 onComplete 函数作为回调添加到 onChange 函数。这样,只有在 onChange 完成执行后才会调用 onComplete 函数,例如:

[...].checkDB( event, queueID, fileObj, function(){
/* the onComplete code goes here*/
});

另外,请查看这两个问题的答案,因为它们似乎拥有您正在寻找的解决方案:

  1. 如何编写一个接受回调作为参数的 jquery 函数
  2. 在 JQuery AJAX 发布之前暂停

希望这可以帮助 !

于 2010-06-18T02:50:43.283 回答