我对使用Ajax上传文件有疑问。如何使用$.ajax()
提交文件
没有特殊的js-plugin?:
<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>
并上传.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'));
?>
答案 0 :(得分:1)
其他选项是使用iframe,
this is a tutorial for doing this;
答案 1 :(得分:1)
无法通过ajax上传文件。您可能想要签出支持文件上传的表单插件:http://jquery.malsup.com/form/
答案 2 :(得分:0)
如果您希望使用这种跨浏览器,那么只能使用AJAX。 (但是你可以不在所有浏览器中工作,你可以看看如何使用XMLHttpRequest上传文件和jquery here)
至于我,最好的方法是使用jQuery Forms插件。
另一种选择是做插件手动做的事情。
它将如下所示:
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();
但对我来说,Forms插件要好得多,因为它有一个非常类似于ajax界面的界面,并为你做了很多脏工作(比如从iframe中检索响应)。