Php ajax文件上传错误

时间:2013-11-20 13:18:02

标签: php jquery ajax file upload

我想使用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

2 个答案:

答案 0 :(得分:2)

我的建议是查看XMLHttpRequestFormDataFile 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谁可以帮助你