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

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

最佳答案

我一般都同意彼得的观点,您应该尝试更优雅地参与这些活动。但是,您可以(可能应该)将该代码提取到一个函数中,并保留一个标志来告知您是否曾经被调用过。像这样:

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

09-15 12:06