Ajax:如何使用FormData和jQuery发送'empty'文件并在$ _FILES中获取它

时间:2013-12-14 07:59:30

标签: javascript php jquery ajax forms

我有html表单,希望用Ajax和jQuery发送文件'myfile':

<form method="post" enctype="multipart/form-data">
    <input type="file" name="myfile" id="myfile">
</form>

我的javascript代码:

function getFile(fieldName){
    var itemValue = $('input[name="' + fieldName + '"]')[0].files[0];
    return itemValue;
}

function sendFile(){
    var formaData = new FormData();
    var itemName = 'myfile';
    var itemValue = getFile(itemName);
    formaData.append(itemName, itemValue);
    $.ajax({
        type: 'POST',
        data: formaData,
        processData: false,
        contentType: false,
    });
}

选择文件时一切正常。我在服务器$ _FILES全局数组和数据中通过Ajax获得:

["myfile"]=>
    array(5) {
        ["name"]=>
        string(13) "file_name.jpg"
        ["type"]=>
        string(10) "image/jpeg"
        ["tmp_name"]=>
        string(14) "/tmp/phpefJlk3"
        ["error"]=>
        int(0)
        ["size"]=>
        int(344100)
    }

选择文件时的问题! 当我没有选择任何文件并发送Ajax请求时,我有空的$ _FILES,但是我的$ _POST字段'myfile'等于'undefined'。但我需要$ _FILES中的'myfile'字段,即使它是空的。我想要这样的东西:

["myfile"]=>
    array(5) {
        ["name"]=>
        string(0) ""
        ["type"]=>
        string(0) ""
        ["tmp_name"]=>
        string(0) ""
        ["error"]=>
        int(4)
        ["size"]=>
        int(0)
    }

如果我在没有Ajax的情况下发送空表单,则上面是我在$ _FILES globall数组中的内容。如果我使用Ajax,我想要相同的。是不可能的?

2 个答案:

答案 0 :(得分:0)

您可以检查$_FILES['myfile']['error']$_FILES['myfile']['size']并返回您选择的数组作为结果。如果$ _FILES ['myfile'] ['error']等于零则没有错误。你可以在php.net找到更多细节

答案 1 :(得分:0)

使用AJAX处理文件并不那么简单。由于不同的客户端,休文件和所有这些东西,它会带来很多问题。 (正如您在“简单”中看到的那样 - 这里的错误=)在您的情况下,没有选择任何文件,因此无需发送有关“无给定文件”的信息。不要产生间接费用。也许你看看你的控制器。如果数据不同(AJAXPOST或POST),那么创建两个PHP-Actions。一个AJAX处理程序和一个POST处理程序。在这种情况下,您可以处理不同的后期数据。

此信息可以帮助您: How can I upload files asynchronously?

您需要使用UploadifyValums这样的插件来完成这项工作。请阅读有关AJAX和Filepost的更多信息。