【问题标题】:How to slow down Uploadify plugin script voor jQuery如何减慢 Uploadify 插件脚本 voor jQuery
【发布时间】:2011-03-05 01:01:36
【问题描述】:

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

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

【问题讨论】:

    标签: jquery uploadify


    【解决方案1】:

    如果我理解正确,我认为您可以将 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

    希望这会有所帮助!

    【讨论】:

    • 您好,谢谢您的回答。但是,它并不能解决我的问题,因为您正在谈论 Ajax 调用的 onChange / onComplete 而我正在谈论 uploadify 脚本选项。如果我按照您的建议将我的 onComplete 放入 ajax 调用中,我冒着与现在发生的情况相反的风险:该函数在我的文件准备好进行处理之前启动。您确实让我想到了一种可能的方式来启动 onComplete 但让它等待数据到达。感谢您的帮助!
    • 哎呀,我错过了 Uploadify 标签,不幸的是我不熟悉它。如果我的喃喃自语让您对您的解决方案有所了解,我很高兴。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这或多或少是我最终解决它的方式。除了,你用 setTimeOut 写的更简洁一些,而不是一个单独的函数,它调用一个 setInterval 来检查某个 var 是否存在,如果存在则触发处理。
      猜你喜欢
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2011-02-13
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多