如何减慢上传goify插件脚本voor jQuery

时间:2010-06-17 15:40:03

标签: jquery uploadify

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

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

3 个答案:

答案 0 :(得分:1)

通过重新排序事件解决了这个问题。处理现在在“onAllComplete”中进行,该功能通过setInterval检查Uploadify上传目录中的图片数量与Uploadify注册​​的上传图片数量相同。一旦两个数字相等,处理就开始了。

答案 1 :(得分: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的长度而不是使用旗帜。

答案 2 :(得分:0)

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

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

另外,请查看这两个问题的答案,因为他们似乎已经找到了您正在寻找的解决方案:

  1. How do I write a jquery function that accepts a callback as a parameter
  2. Pause before JQuery AJAX post
  3. 希望这有帮助!