2

それが変な質問じゃないなら、私にはそれが何かわかりません。

しかし、ここに問題があります。「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;
}
4

3 に答える 3

1

私は、イベントをよりエレガントに活用するように努めるべきだという 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 の長さをチェックできます。

于 2010-06-22T17:27:18.813 に答える
1

イベントの並べ替えで解決しました。処理は「onAllComplete」で行われ、その関数は setInterval を介して Uploadify のアップロード ディレクトリ内の写真の数が Uploadify によって登録されたアップロードされた写真の数と同じであることを確認します。2 つの数値が等しくなると、処理が開始されます。

于 2010-06-22T05:57:49.697 に答える
0

これを正しく理解していれば、onComplete関数をonChange関数へのコールバックとして追加できると思います。このように、onComplete関数は、onChangeの実行が終了した後にのみ呼び出されます。たとえば、次のようになります。

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

また、これら2つの質問に対する回答を確認してください。これらは、探している解決策をほぼ持っているようです。

  1. コールバックをパラメーターとして受け入れるjquery関数を作成するにはどうすればよいですか?
  2. JQueryAJAX投稿の前に一時停止

お役に立てれば !

于 2010-06-18T02:50:43.283 に答える