1

私のプロジェクトには、非常にファンキーな AJAX アップロードを行うのに役立つ次のコードがあります。

<script>
    $(function(){
        var uploader = new qq.FileUploader({
            action: "{% url ... %}",
            element: $('#file-uploader')[0],
            multiple: true,
            onComplete: function(id, fileName, responseJSON) {
                if(responseJSON.success) {
                    alert("success!");
                } else {
                    alert("upload failed!");
                }
            },
            onAllComplete: function(uploads) {
                // uploads is an array of maps
                // the maps look like this: {file: FileObject, response: JSONServerResponse}
                alert("All complete!");
            },
            params: {
                'csrf_token': '{{ csrf_token }}',
                'csrf_name': 'csrfmiddlewaretoken',
                'csrf_xname': 'X-CSRFToken',
                'iID': '{{ itemID }}',
                'received': $('letter_received').val(),
                'is_company': $('letter_is_company').val(),
            },
        });
    });
</script>

唯一の問題は、追加の GET 値をサーバーに渡したいということです。上記を試しましたが、値が変更されたときではなく、ページが開いたときにスクリプトが実行されます。上記の「 Sending additional params 」の下のリンクで、作成者は次のコードを使用して実行時に値を追加することを推奨しています。

uploader.setParams({
   anotherParam: 'value'
});

uploader変数にアクセスする方法がわかりません。以下に例を示します。

<button onclick="update_uploader(1,0)">
...
<script>
    function update_uploader(received,is_company) {
        uploader.setParams({
            received: received,
            is_company: is_company
        });
    }
</script>

uploader範囲の問題でアクセスできません。[はい、外側で宣言しようとしましたが、アップローダーが壊れます:(]uploader$(function(){

何か案は?

4

3 に答える 3

1

に変更var uploaderuploaderます。これにより、変数がグローバルになります。

于 2012-07-14T12:14:52.503 に答える
0

このコードをjQuery$(function(){ブロック内に配置する必要はありません。コードの最初の行と最後の行を削除すると機能するはずです。

于 2012-07-14T10:54:38.447 に答える
0

コード内のアップローダーはローカル変数です。de function() の外でこの変数にアクセスする場合は、アップローダーをグローバル変数として宣言する必要があります (ただし、これはほとんど推奨されませんが、実際にはここでは範囲外です)。問題を解決するには、次のように変更します。

var uploader = new qq.FileUploader({
        action: "{% url ... %}",
        ....
});

window.uploader = new qq.FileUploader({
        action: "{% url ... %}",
        ....
});

その後、アップローダはページでグローバルに利用できるようになります。

于 2012-07-14T10:11:18.613 に答える