2010-06-17 42 views
2

现在,如果这不是一个奇怪的问题,我不知道是什么。如何减慢Uploadify插件脚本到jQuery

但这里是问题:我有一个函数在我的“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; 
} 

回答

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

+0

这或多或少是我最终解决的。除此之外,你已经用setTimeOut写了一个清理器,而不是一个独立的函数,它调用一个setInterval来检查某个var是否存在,如果这样会触发处理。 – Peter 2010-06-23 06:23:00

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

希望这有助于!

+0

嘿,谢谢你的回答。它不能解决我的问题,因为您正在讨论关于Ajax调用的onChange/onComplete,我正在讨论uploadify脚本选项。如果我按照你的建议将我的onComplete放在ajax调用中,我就冒着与现在发生的事情相反的风险:该函数在我的文件到位之前开始处理。你确实让我想到了一种可能的方式来启动onComplete,但是让它等待数据到达。 感谢您的帮助! – Peter 2010-06-18 06:55:43

+0

Oopsie,我错过了Uploadify标签,不幸的是我对此并不熟悉。如果我的嘟gave声给了你一个解决方案的想法,我很高兴。 – 2010-06-18 14:23:12

1

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