File Upload事件上下文和javascript



我需要有条件地打开的文件上传对话框

<input type="file" id="Upload">

基于来自服务器的Ajax响应。输入元素是隐藏的,因为我不想显示默认的丑陋文件文本框和按钮。所以我有另一个元素,用户点击它来启动上传。

以下内容在由用户启动事件上下文的脚本中运行良好。

$('#Upload').click();

但当Ajax调用的响应执行时失败。现在我知道出于安全考虑,这是为Firefox和Chrome设计的,但在我的情况下,用户启动Ajax调用,服务器需要决定服务器上当前的条件是否允许上传。如果是这样的话,我想打开文件上传对话框,否则我需要发布一条消息,说明由于x原因不允许该操作(由服务器返回)。

问题是Ajax回调不在用户脚本上下文中,因此没有执行用于打开文件对话框的.click()(按设计)。

还可以做些什么来解决这个问题?有没有一种方法可以捕获用户事件上下文并将其重新用于Ajax调用的回调?

要使用JQuery制作一个简单的上传程序,请使用以下代码

HTML

<form id="form" enctype="multipart/form-data">
    <input type="file" id="Upload"></br>
    <div class="progress">
        <div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div>
    </div>
    <button type="submit">Start Upload</button>
</form>

您选择您的文件,并在确认上传后点击按钮"开始上传"

JQuery

$('#form').submit(function(){
    var data = new FormData(this);
    $.ajax({
        type: "POST",
        url: URL_TO_UPLOADER,
        data: data,
        contentType: false,
        cache: false,
        processData:false,
        beforeSend: function() {
            $(".progress-bar").width('0%');
        },
        xhr: function() {
            var xhr = new window.XMLHttpRequest();
            // Upload progress
            xhr.upload.addEventListener("progress", function(evt) {
                if (evt.lengthComputable) {
                    var percentComplete = (evt.loaded / evt.total) * 100;
                    $(".progress-bar").width(percentComplete+'%');
                }
            }, false);
            // Download progress
            xhr.addEventListener("progress", function(evt) {
                if (evt.lengthComputable) {
                    var percentComplete = evt.loaded / evt.total * 100;
                    $find(".progress-bar").width(percentComplete+'%');
                }
            }, false);
            return xhr;
        },
        success: function(data) {
            alert("Success");
            // File Uploaded
        },
        error: function(xhr, textStatus, errorThrown) {
            alert("Error");
        },
    });
});

PATH_TO_UPLOADER是接收文件的url。

最新更新