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 值传递给服务器。我已经尝试了上述方法,但是脚本在页面打开时执行,而不是在值更改时执行。在上面“发送附加参数”下的链接中,作者建议在运行时使用以下代码添加附加值:

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

代码中的上传器是一个局部变量,如果你想在 de function() 之外访问这个变量,你必须将 updloader 声明为全局变量(但这几乎从不推荐,但确实超出了这里的范围)。要解决您的问题,只需更改:

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

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

然后上传器将在页面中全局可用。

于 2012-07-14T10:11:18.613 回答
0

您不需要将此代码放在 jQuery $(function(){ 块中。删除代码中的第一行和最后一行应该可以工作。

于 2012-07-14T10:54:38.447 回答