Php 使用jQuery上传文件
我有一个关于用Ajax上传文件的问题。如何使用Php 使用jQuery上传文件,php,jquery,html,ajax,upload,Php,Jquery,Html,Ajax,Upload,我有一个关于用Ajax上传文件的问题。如何使用$.ajax()提交文件 没有特殊的js插件 <form action="javascript:return false;"> <input type="text" id="name" /> <input type="file" id="myfile" /> <input type="button" id="submitbutton" value="submit" /> <
$.ajax()提交文件
没有特殊的js插件
<form action="javascript:return false;">
<input type="text" id="name" />
<input type="file" id="myfile" />
<input type="button" id="submitbutton" value="submit" />
</form>
这是一个jQuery小代码:
<script type="text/javascript">
$(document).ready(function() {
$('#submitbutton').click(function() {
$.ajax({
type: 'POST',
dataType: 'json',
enctype: 'multipart/form-data',
url: 'upload.php',
async: false,
data: {
'name': $('#name').val(),
'myfile': $('#myfile').val()
},
success: function(data) {
alert(data.msg);
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#提交按钮”)。单击(函数(){
$.ajax({
键入:“POST”,
数据类型:“json”,
enctype:“多部分/表单数据”,
url:'upload.php',
async:false,
数据:{
“name”:$(“#name”).val(),
“myfile”:$(“#myfile”).val()
},
成功:功能(数据){
警报(data.msg);
}
});
});
});
和upload.php文件:
<?php
$name = isset($_POST['name']) ? $_POST['name'] : '';
if (isset($_FILES) && isset($_FILES["file"])) {
$files = $_FILES['file'];
$error = isset($files["error"]) ? $files["error"] : '';
$fname = isset($files["name"]) ? $files["name"] : '';
$type = isset($files["type"]) ? $files["type"] : '';
$size = isset($files["size"]) ? $files["size"] : '';
$tmp_name = isset($files["tmp_name"]) ? $files["tmp_name"] : '';
return array('msg' => "Hello, $name! \nYour file data:\nErr: $error, Name: $fname, Type: $type, Size: $size, Tmp: $tmp_name");
}
echo json_encode(array('msg' => 'create image'));
?>
其他选项使用的是iframe,
无法通过ajax上载文件。您可能希望签出支持文件上传的表单插件:如果您希望在跨浏览器中使用该插件,那么仅使用AJAX是无法做到这一点的。(但这并不适用于所有浏览器,您可以看看如何使用XMLHttpRequest和jquery上传文件)
对我来说,最好是使用插件
另一个选择是做同样的事情插件手动
它将如下所示:
var ifrm = $("<iframe>", {id:"tmp_upload_frame"}).onload(function() {
// do something when response is returned
}).hide();
$("body").append(ifrm);
$("form").prop("target", "tmp_upload_frame")
.prop("enctype","multipart/form-data")
.submit();
var ifrm=$(“”,{id:“tmp\u upload\u frame”}).onload(函数(){
//当响应返回时,请执行某些操作
}).hide();
$(“正文”)。追加(ifrm);
$(“表单”).prop(“目标”、“tmp上传帧”)
.prop(“enctype”、“多部分/表单数据”)
.submit();
但对我来说,Forms plugin要好得多,因为它有一个非常类似于ajax接口的接口,并且为您做了很多脏活(比如从iframe检索响应)。您不能用ajax发布文件。您不能用ajax上传文件,您需要尽可能使用一些第三方库,但不能使用较旧的浏览器。请参见以下答案:它不是重复的。我反对这一论点。