Ajax图片上传仅在iOS上失败:内部服务器错误

时间:2014-09-25 10:58:05

标签: jquery ios ajax

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

我检查了我的服务器端代码,但没有错。如果我在服务器端PHP脚本的第一行代码中写了一个die();,我甚至会得到错误。似乎Safari错误地上传了图片。也许有人可以帮我修复这个bug。提前谢谢!

这是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);
        }
    });
}

2 个答案:

答案 0 :(得分:0)

更新代码

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);
        }
    });
}

答案 1 :(得分:0)

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

相关问题