我怎么能修复我的jQuery上传脚本不抛出错误


How can I fix my jQuery Upload Script to not throw an error?

我有一个文件上传表单。提交后,表单将数据发送到iframe,然后使用jQuery和PECL UploadProgress获取文件的上传进度。当脚本请求上传进度并且响应为空时,文件已完成上传,脚本然后读取iframe以获取文件的信息。

脚本运行的时间间隔,当响应为空时将被清除。

我对脚本的问题是,如果文件在请求文件进度之前上传,则会发生错误,因为浏览器将尝试获取尚未设置的属性值(响应将为空白)。

我如何检查文件是否已完成上传之前,脚本试图得到一个尚未设置的属性的值?

是否有一些方法可以添加某种类型的监听器到iframe,以便当它完成加载时,我可以立即取消间隔并显示结果?

我想在请求之前检查iframe的内容,如果有数据,取消请求并显示数据,但它似乎不起作用。

IE出错:

    Line: 37
    Error: Unable to get value of the property 'filename': object is null or undefined

如果这看起来有点愚蠢,我提前道歉,我还没有睡在这个项目上,我找不到一个方法来解决这个问题。

function beginUpload()
{
    // Hide the upload form
    $("#uploadContainer").hide(function(){
        $(".fileProgress").show();
    });
    var interval = setInterval(function(){
        $.getJSON("upload.php?uploadProgressKey=" + uploadProgressKey, function(returnData){
            if($("#uploadFrame").contents().find("html body").html() !== "")
            {
                clearInterval(interval);
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            if(returnData == null)
            {
                // Upload complete as there is not data to report about upload
                // Stop the interval of checking the data
                clearInterval(interval);
                // Load result to content div
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            setUploadInformation(returnData.filename, returnData.bytes_uploaded, returnData.bytes_total, returnData.speed_average);
            setUploadBar(returnData.bytes_uploaded, returnData.bytes_total);
        });
    }, 800);
}

不知道这是否会起作用:

function beginUpload() {
    // Hide the upload form
    $("#uploadContainer").hide(function(){
        $(".fileProgress").show();
    });
    var checkProgress = function () {
        $.getJSON("upload.php?uploadProgressKey=" + uploadProgressKey, function(returnData){
            if($("#uploadFrame").contents().find("html body").html() !== "") {
                clearInterval(interval);
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            if(returnData == null) {
                // Upload complete as there is not data to report about upload
                // Stop the interval of checking the data
                clearInterval(interval);
                // Load result to content div
                $("#content").html($("#uploadFrame").contents().find("html body").html());
            }
            setUploadInformation(returnData.filename, returnData.bytes_uploaded, returnData.bytes_total, returnData.speed_average);
            setUploadBar(returnData.bytes_uploaded, returnData.bytes_total);
        });
    }
    var interval = setInterval(checkProgress, 800);
    checkProgress();
}

您的间隔首先在800ms后开始。我创建了函数checkProgress并在初始化间隔后调用它。这样你就可以一次检查所有的内容。

仍然我认为你可以满足相同的错误,如果第一个AJAX调用(getJSON)后完成上传?