我想使用ajax上传文件,但我没有在php $_FILES
中获取数据,而是在$_REQUEST
中获取。我该怎么做。下面是我的jquery代码.Ajax不能用于文件上传,所以有任何代码,以便我可以与现有代码合并进行文件上传过程。
<script>
jQuery(function($){
jQuery('#btn').click(function(){
var data = {},
ticks = [];
$('.ajax_elements').each(function(_, elem) {
data[this.id] = this.value;
});
$.ajax({
type : 'POST',
url : 'app_process.php',
data : data,
cache : false
}).done(function(result) {
alert(result);
});
});
});
</script>
<form name="frm" enctype="multipart/form-data">
<input type="text" name="bb" class="ajax_elements" id="one"/>
<input type="file" class="ajax_elements" name="passport" id="passport" />
<input type="button" name="bttn" id="btn" />
</form>
这里是php文件代码
<?php
if($_REQUEST['passport']!=''):
$uploaddir = 'images/';
move_uploaded_file($_FILES["file"]["tmp_name"], $uploaddir . str_replace(" ","_",$_REQUEST['passport']));
endif;
?>
错误消息
注意:未定义索引:文件输入 G <\ xampp \ htdocs \ data_ajax \ app_process.php 5
答案 0 :(得分:2)
我的建议是查看XMLHttpRequest
,FormData
和File
API。 Mozilla Developer Network有关于所有这些的很好的文档。
这需要在您的开发环境中进行测试和调整以获得更强大的功能,但是根据这一点可以让您开始......
<script>
$('#btn').click(function() {
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("load", function(e){
// stuff to do when upload is complete
}, false);
xhr.upload.addEventListener("progress", function(e){
// stuff here to handle progress bars, progress percentages etc.
}, false);
xhr.open('POST', 'app_process.php', true);
var formdata = new FormData();
var file = $('#passport').get(0).files[0];
formdata.append('passport', file);
xhr.send(formdata);
});
</script>
和PHP ......
<?php
if (isset($_FILES['passport'])) {
$uploaddir = 'images/';
$upload = move_uploaded_file($_FILES['passport']['tmp_name'], $uploaddir . str_replace(" ","_",$_FILES['passport']['name'])) or exit('Upload failed.');
} else {
exit('File not found');
}
?>
您要随文件一起发送的任何其他信息都需要添加到FormData
对象中。这些将出现在PHP $_POST
变量中。
formdata.append('field', 'data');
请记住,浏览器并不普遍支持这些API,因此最佳做法是在用户到达此点之前包含所有常用的功能检测脚本。
您还可以将上传功能绑定到文件输入的更改事件,而不是要求单击按钮...
$('#passport').change(function() { ...
希望有所帮助。
答案 1 :(得分:0)
有两个问题:
如果要上传文件,则需要在表单标记中添加属性enctype="multipart/form-data"
:
替换
<form name="frm">
通过
<form name="frm" enctype="multipart/form-data" >
使用ajax(和jquery),您无法直接发送文件。但我建议你jquery form plugin谁可以帮助你