AJAX文件上传后$ _POST和$ _FILES为空

时间:2016-08-03 15:17:50

标签: javascript php jquery ajax

我是网络开发的新手,我遇到的最新问题是ajax文件上传...

现在我有两个HTML输入字段;文件输入和按钮。

<input type="file" name="Frame" id="Frame_"/>
<input type="button" name="FrameButton" id="FrameButton_" value="UPLOAD"/>

单击按钮后,我调用具有以下代码的函数..

var frame = document.getElementById('Frame_');
var frameImg = frame.files[0];
var form_data = new FormData();

form_data.append('frame', frameImg);

jQuery.ajax({
    url : './handler.php',
    type : 'post',
    data  :  form_data
    contentType : false,
    processData : false,
    success : alert("Frame Uploaded")
});

当我在var_dump()$ _POST和$ _FILES数组时,它将两个数组显示为空。这是尽管Chrome Dev阅读中的“请求有效负载”

  

内容 - 处置:表单数据; NAME = “框架”;文件名= “GoldFrame.jpg”

     

内容类型:image / jpeg

我认为这意味着我在前端选择的文件信息已成功“发布”到我的handler.php文件中。这是错误的解释吗?

无论哪种方式,有人可以给我一个问题的答案吗?或者至少指向可能有我答案的资源?似乎有许多类似的问题沿着相同的路线,但我没有看到一个有一个坚实的答案。

过去我曾经使用过iframe这类东西,但这似乎是一种非常糟糕的方法,而且我希望将来可以灵活地使用ajax来完成这类任务。

非常感谢帮助。

3 个答案:

答案 0 :(得分:3)

试试这个。

表单(index.html)

$("#uploadForm").on('submit',(function(e) {
    e.preventDefault();
    $.ajax({
        url: "handler.php",
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData: false,
        success: function(data){
            console.log(data);
        }           
    });
}));

脚本(script.js)

<?php 

var_dump($_FILES);

服务器端(handler.php)

{{1}}

答案 1 :(得分:0)

你是var_dump() - 你在handler.php文件中的$ _FILES / $ _ POST数组吗?

如果你试图将这些变量转储到具有ajax调用的文件中,它将无法工作,因为AJAX正在进行前端调用,而files / post变量是服务器端变量...这意味着只有handler.php文件才有这些变量可用。

尝试在handler.php中添加var_dump()调用,并将结果输出到ajax调用中,我希望你能看到你正在寻找的结果。

答案 2 :(得分:0)

发布文件和/或文本时,这组代码对于调试也很有用。您可以使用它来查看您的帖子是否太大,因为即使帖子过大,也可能导致空的$ _POST和$ _FILE数组。

    print_r($_POST); /* Looks at the $_POST array. (Will be empty if $_SERVER['CONTENT_LENGTH']/1000000 is greater than ini_get('post_max_size') ) */
    echo "<br>";
    print_r($_FILES); /* Looks at the $_FILES array. It will also show you the file size in bytes: divide it by 1 million (1000000) to get the megabytes value. (Will be empty if $_SERVER['CONTENT_LENGTH']/1000000 is greater than ini_get('post_max_size') ) */
    echo "<br>" . $_SERVER['CONTENT_LENGTH']/1000000 ; /* This will give you the size in megabytes of your $_POST */
    echo "<br>" . ini_get('post_max_size'); /*This will show you the post_max_size in your php.ini file*/
    echo "<br>" . ini_get('upload_max_filesize'); /*This will show you the upload_max_filesize in your php.ini file*/
    // phpinfo(); // You might not need this function but you can use it for more information on your php.ini file. It can help you find its location (for maybe editing purposes) and view its data.