【问题标题】:Ajax picture upload fails only on iOS: Internal Server ErrorAjax 图片上传仅在 iOS 上失败:内部服务器错误
【发布时间】:2014-09-25 22:00:26
【问题描述】:

我实现了一个 ajax 文件上传,如 http://abandon.ie/notebook/simple-file-uploads-using-jquery-ajax 中所述。在所有浏览器中一切正常,但 iOS 上的 Safari 除外。作为响应,我收到内部服务器错误。

我检查了我的服务器端代码,但没有任何问题。如果我在服务器端 PHP 脚本的第一行代码处编写 die();,我什至会收到错误消息。看起来好像 Safari 错误地上传了图片。也许有人可以帮我修复这个错误。提前致谢!

这是 HTML 代码:

<input type="file" id="pict" accept="image/*">
<input type="text" id="field1">
<input type="text" id="field2">
<button id="send">Send</button>

这是 Javascript:

var files = false;

$('#pic').on('change', prepareUpload);

function prepareUpload(event)
{
    files = event.target.files;
}

$("body").on("click", "#send", function() {
        uploadTB();
});

function uploadTB() {
    var postdata = new FormData();
    if (files !== false){
    $.each(files, function(key, value)
    {
        postdata.append(key, value);
    });
    }
    postdata.append("field1", $("#field1").val());
    postdata.append("field2", $("#field2").val());
    $.ajax({
        url: 'http://example.org/index.php',
        type: 'POST',
        data: postdata,
        cache: false,
        processData: false, 
        contentType: false, 
        success: function(data)
        {
           console.log("sucess");
        },
        error: function(jqXHR, textStatus, errorThrown)
        {
            console.log(jqXHR,textStatus,errorThrown);
        }
    });
}

【问题讨论】:

    标签: jquery ios ajax


    【解决方案1】:

    更新代码

    var files = false;
    
    $('#pic').on('change', prepareUpload);
    
    function prepareUpload(event)
    {
        files = event.target.files;
    }
    
    $("body").on("click", "#send", function() {
            uploadTB();
    });
    
    function uploadTB() {
        var postdata = new FormData();
        if (files !== false){
        $.each(files, function(key, value)
        {
            postdata.append(key, value);
        });
        }
        postdata.append("field1", $("#field1").val());
        postdata.append("field2", $("#field2").val());
        $.ajax({
            url: 'http://example.org/index.php',
            type: 'POST',
            data:  formData,
            mimeType:"multipart/form-data",
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
               console.log("sucess");
            },
            error: function(jqXHR, textStatus, errorThrown)
            {
                console.log(jqXHR,textStatus,errorThrown);
            }
        });
    }
    

    【讨论】:

    • 遗憾的是这并没有解决它。为了查看它是否上传,我添加了一个 XHR 进度监听器,它保持在 0%,有或没有 mimetype 属性。
    • @dboth 尝试将所有元素放入一个表单中。希望这会奏效。
    【解决方案2】:

    这似乎是 iOS 8 中的一个主要错误。请参阅:https://github.com/Widen/fine-uploader/issues/1284 我现在可以借用一台装有 iOS 7 的 iPad,瞧,它可以工作了。感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2012-01-11
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 2016-04-11
      相关资源
      最近更新 更多