Как замедлить скрипт плагина Uploadify для jQuery - PullRequest
2 голосов
/ 17 июня 2010

Теперь, если это не странный вопрос, я не знаю, что это такое.

Но вот проблема: у меня есть функция в моей опции "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 ]

1 голос
/ 22 июня 2010

Решил это, переупорядочив события. Обработка теперь происходит в «onAllComplete», и эта функция проверяет через setInterval, что количество изображений в каталоге загрузки Uploadify такое же, как количество загруженных изображений, зарегистрированных Uploadify. Как только два числа равны, начинается обработка.

1 голос
/ 22 июня 2010

Я в целом согласен с Питером, что вы должны попытаться использовать события более элегантно. Однако вы можете (и, вероятно, должны) извлечь этот код в функцию и сохранить флаг, который сообщает вам, вызывался ли он раньше. Примерно так:

    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 голосов
/ 18 июня 2010

Если я правильно понимаю, я думаю, что вы можете добавить функцию onComplete в качестве обратного вызова к функции onChange.Таким образом, функция onComplete будет вызываться только после завершения выполнения onChange, что-то вроде:

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

Кроме того, проверьте ответы на эти два вопроса, так как они, похоже, имеют решение, которое вы 'Вы ищете:

  1. Как написать функцию jquery, которая принимает обратный вызов в качестве параметра
  2. Пауза перед JQuery AJAX post

Надеюсь, это поможет!

...