1

そのため、jquery ファイルのアップロードを paperclip で使用して、データベースにファイルを動的に追加するアプリケーションがあります。新しいファイルを追加するとき ([アップロードの開始] ボタンをクリックした後)、ページが更新されないことを除いて、すべてが機能しています (ただし、ファイルはデータベースに適切に挿入され、Amazon s3 に送信されます)。

コンソールをチェックアウトしたところ、ファイルをアップロードすると、PUT リクエストのみがあり、本来あるべき GET リクエストがないことに気付きました。

ちなみに、実際のアプリと同じコードのデモアプリもあり、動作しています。また、デモ アプリでファイルをアップロードすると、PUT 要求の直後に GET 要求が続くことに気付きました。

そこで、さまざまなコールバックにアラートを入れたところ、「完了」機能に問題があることがわかりました。「完了」の関連コードは次のとおりです。

// Callback for successful uploads:
            done: function (e, data) { alert('done');
                var that = $(this).data('fileupload'),
                    template;
                if (data.context) { alert('done: if');
                    data.context.each(function (index) {
                        var file = ($.isArray(data.result) &&
                                data.result[index]) || {error: 'emptyResult'};
                        if (file.error) { alert('done: file.error');
                            that._adjustMaxNumberOfFiles(1);
                        }
                        that._transition($(this)).done(
                            function () { alert('done: function');
                                var node = $(this);
                                template = that._renderDownload([file])
                                    .css('height', node.height())
                                    .replaceAll(node);
                                that._forceReflow(template);
                                that._transition(template).done(
                                    function () { alert('done: function2');
                                        data.context = $(this);
                                        that._trigger('completed', e, data);
                                    }
                                );
                            }
                        );
                    });

デモ アプリでは、上記のコードのすべてのアラート メッセージがヒットします。ただし、私の実際のアプリでは、alert('done: if') までしかヒットしません。つまり、_renderDownload と _forceReflow が呼び出されないため、ページをリロードするまでファイルのリストが更新されません。

また、これが役立つ場合に備えて、デモ アプリと実際のアプリの両方で、関連するすべてのコールバックにアラートを追加して、何かが呼び出されていないかどうかを確認しました。呼び出されたアラートをそれぞれの順序でリストします (注: これらは「アップロードの開始」ボタンを押した後にアラートが呼び出されます):

デモアプリ:

_startHandler
start
send
done
done: if statement
done: function 
_renderDownload
_forceReflow
done: function2
stop
stop2

実際のアプリ:

_startHandler
start
send
done
done: if
stop
stop2
4

0 に答える 0