上次更新后,Safari(iOS和OS X)上的Ajax文件上传中断

acb*_*980 2 safari ajax jquery file-upload

我正在使用jQuery和$ .ajax() - 函数来提交我的表单字段.请求如下所示:

    $.ajax({
        url: url,
        type: method,
        data: formData,
        contentType: false,
        processData: false,
        success: function(data) {
            // do some stuff with data
        },
        timeout: 30000,
        error: function(jqxhr,status,error) {
            console.log(jqxhr);
        }
    });
Run Code Online (Sandbox Code Playgroud)

url,方法等变量直接取自表单属性.变量formData是一个FormData-Object,它包含要发送到服务器的所有数据.

这些都适用于多年以来在所有浏览器中.但是自OS X和iOS上次更新以来,当表单中有type = file的输入时,Safari无法处理此请求.问题是,我没有得到任何错误消息,所以它失败了错误回调,但其中的jqxhr变量没有消息(statusText:"error",responseText:"").

您是否知道如何更接近错误消息以便我可以解决此问题?我已经在Mac OS X上测试了所有其他浏览器,它运行得很好(这也是Safari多年来做的).

acb*_*980 5

问题(也在评论中发布)是空文件输入.最简单的解决方案是检查它们并从formData对象中删除它们.我现在用以下代码解决了它,它与aletzo的链接略有不同,但是做的相同:

    $('input[type=file]',form).each(function() {
        var files = $(this).prop('files');
        if ( files != undefined && files.length <= 0 ) {
            formData.delete($(this).attr('name'));              
        }
    });
Run Code Online (Sandbox Code Playgroud)

感谢大家的帮助.