我已经到处寻找解决办法了。大家都是这么做的,但我却不管用。
相关HTML:
<input type="file" name="file" id="file">
<button type="submit" id="submit" name="import">Import</button>
相关Jquery:
$(document).ready(function(){
$("button").click(function(){
var fd = new FormData();
fd.append("file", file);
alert(fd.get("file"));
$.ajax({
//URL of the PHP file
url: "readFile.php",
//fd will be send
data:fd,
//json is the type that should be returned
dataType: "json",
//To prevent processing
cache:false,
contentType: false,
processData: false,
//when successful
success: function( data ) {
console.log(data);
}
});
});
});
最后,我编写的用于查找错误的PHP: (named readFile.php)
<?php
if(isset($_FILES["file"]["name"])){
echo json_encode("great");
}else {
echo json_encode("bad");
}
?>
这段代码可以工作,除了PHP应该接收文件的部分。
PHP检查它是否收到了文件。如果它在那里,它会打印出&;great&;,但是当我点击按钮时,它总是打印出(控制台日志)&;bad&;。
为了使其工作,需要在客户端JavaScript中更改两件事。
-
file
变量当前持有对HTMLInputElement
的引用,而不是所选二进制文件。file
类型的元素提供了一个files
属性(MDN docs),其中包含要上传的文件列表。要上传(单个)选中的元素,检索第一个元素,如下所示:fd.append("file", file.files[0]);
-
如果没有指定参数,jQuery的
$.ajax()
方法将默认发送GET请求(jQuery文档)。根据RFC 7231,"GET请求消息中的有效负载没有定义的语义"。底层XMLHttpRequest
API忽略GET请求的任何主体(XHR规范)。相反,您可能想要发送一个适合上传文件(PHP文档)的POST请求。确保按如下方式添加HTTP方法:$.ajax({ // existing configuration method: 'POST' });
应该是这样!还请注意,cache
属性不需要设置,因为POST请求无论如何都不会缓存。