如何降低上传插件脚本voor或jQuery的速度

如何降低上传插件脚本voor或jQuery的速度,jquery,uploadify,Jquery,Uploadify,如果这不是一个奇怪的问题,我不知道是什么 但问题是:我的“onSelect”选项中有一个函数必须收集一些数据(通过AJAX),我的“onComplete”选项中有一个函数根据收集的数据“onSelect”处理刚刚上传的文件 然而,对于非常小的文件,“onSelect”在上传完成之前还没有完成,“onComplete”由于缺少必要的数据而失败。更大的文件很好用 所以,我正在寻找一种方法来暂停文件的上传。使其仅在onSelect中的函数完成获取必要数据后启动 有什么想法吗 以下是onSelect触发

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

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

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

[...].checkDB( event, queueID, fileObj, function(){
/* the onComplete code goes here*/
});
此外,请查看这两个问题的答案,因为它们似乎都有您想要的解决方案:


  • 希望这有帮助

    通过重新排序事件解决了这个问题。处理现在在“OnalComplete”中进行,该函数通过设置间隔检查Uploadify的上载目录中的图片数是否与Uploadify注册的上载图片数相同。一旦这两个数字相等,处理就开始了。

    我大体上同意彼得的观点,即你应该尝试更优雅地进入事件。但是,您可以(也可能应该)将该代码提取到函数中,并保留一个标志,告诉您以前是否调用过该代码。大概是这样的:

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

    嘿,谢谢您的回答。但是,这并不能解决我的问题,因为您正在讨论Ajax调用的onChange/onComplete,而我正在讨论uploadify脚本选项。如果我按照您的建议将onComplete放在ajax调用中,我将冒与现在发生的情况相反的风险:函数在处理文件之前启动。你确实让我想到了一种可能的方法来启动onComplete,但是让它等待数据到达。谢谢你的帮助!哎呀,我错过了Uploadify标签,不幸的是我不熟悉它。如果我的咕哝能给你一个解决方案的想法,我很高兴。或多或少,这就是我最终解决问题的方式。除此之外,您还使用setTimeOut编写了一个更简洁的函数,而不是一个单独的函数,该函数调用setInterval来检查某个变量是否存在,如果存在则触发处理。