PHP 脚本没有收到我使用 Jquery 使用 AJAX 发送给它的文件



我已经到处寻找解决办法了。大家都是这么做的,但我却不管用。

相关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中更改两件事。

  1. file变量当前持有对HTMLInputElement的引用,而不是所选二进制文件。file类型的元素提供了一个files属性(MDN docs),其中包含要上传的文件列表。要上传(单个)选中的元素,检索第一个元素,如下所示:

    fd.append("file", file.files[0]);
    
  2. 如果没有指定参数,jQuery的$.ajax()方法将默认发送GET请求(jQuery文档)。根据RFC 7231,"GET请求消息中的有效负载没有定义的语义"。底层XMLHttpRequestAPI忽略GET请求的任何主体(XHR规范)。相反,您可能想要发送一个适合上传文件(PHP文档)的POST请求。确保按如下方式添加HTTP方法:

    $.ajax({
    // existing configuration
    method: 'POST'
    });
    

应该是这样!还请注意,cache属性不需要设置,因为POST请求无论如何都不会缓存。

最新更新