2010-06-17 40 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註冊​​的上傳圖片數量相同。一旦這兩個數字相等,處理就開始了。