我有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,我想要相同的。是不可能的?
答案 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?