FormData()不适用于Firefox和Internet Explorer; 只有Chrome可以

我正尝试使用FormData()构建AJAX图像上载,并且它不适用于Firefox和IE。 在Chrome中,一切都表现良好; php脚本接收表单数据对象并按预期返回响应。

但是,在Firefox和Internet Explorer中,总是会返回一个空字符串作为响应(AJAX调用已成功发送)。 当我检入普通的Network选项卡时,内容的大小为0.当我在Firebug的Network选项卡中检查这个时,POST选项卡实际上表示我的FormData()包含文件:

内容处理:表单数据; NAME = “fileToUpload”; filename =“9VMyIQM4Vg8.jpg”Content-Type:image / jpeg

但内容长度为0,php脚本无法检索文件。 即使我尝试使用append手动创建FormData(),它也无济于事。

Firefox版本35.0.1(和文档说FormData()应该工作得很好)和IE版本11(所以它应该也处理FormData())。 任何帮助将非常感谢!

这里是我的代码(我缩短了PHP脚本的测试)。

HTML:

<form method="post" action='upload.php' name='imageUploadForm' id="imageUploadForm" enctype="multipart/form-data">
            <div class="form-group">
                <label for='fileToUpload'>Select image to upload:</label>
                <input type="file" name="fileToUpload" id="fileToUpload" />
                <button type="submit" name="uploadBtn" id="uploadBtn">Preview image</button>
                <p id='uploadResult'></p>
            </div>
        </form>

JQuery的:

$('#imageUploadForm').on('submit', function (event) {
var form = $(this);
event.preventDefault();
var formData = false;
if (window.FormData) {
    formData = new FormData(form[0]);
}

$.ajax({
    type: 'POST',
    url: 'upload.php',
    data: formData,
    cache: false,
    contentType: false,
    processData: false,
    success: function (data) {
        console.log("success");
        console.log(data);
        $('#uploadResult').text(data);
    },
    error: function (data) {
        console.log("error");
        console.log(data);
        $('#uploadResult').text(data);
    }
});

});

PHP:

if ($_POST) {
if (!empty($_FILES['fileToUpload']['name'])) {
    $image = basename($_FILES['fileToUpload']['name']);
    $target_file = $target_dir . $userID . "_" . basename($_FILES["fileToUpload"]["name"]);

    echo $target_file;

} else {
    print 'Please select a file to upload.';
}}

即使我尝试发送空表格,我也不会收到错误“请选择要上传的文件”。


好的,所以我最终让Firefox和Internet Explorer通过POST将formData()对象发送到PHP脚本。

HTML和jQuery部分是可以的。 问题在于php脚本 - 它缺少检查isset($ _ POST)。 添加此检查后,所有内容都开始工作:

更新PHP:

if (isset($_POST)) // isset() check fixed the issue {
if (!empty($_FILES['fileToUpload']['name'])) {
    $image = basename($_FILES['fileToUpload']['name']);
    $target_file = $target_dir . $userID . "_" . basename($_FILES["fileToUpload"]["name"]);

    echo $target_file;
    die();

   } else {
    print 'Please select a file to upload.';
}} else {
echo 'Nothing was sent';}

课程:总是明确编码。

链接地址: http://www.djcxy.com/p/5347.html

上一篇: FormData() not working in Firefox and Internet Explorer; only Chrome is OK

下一篇: Upload a base64 encoded image using FormData?