javascript - 通过 Ajax 将图像上传到 PHP

标签 javascript php jquery ajax

我试图根据这个问题在我的应用程序中创建一个图像上传字段: Send FormData and String Data Together Through JQuery AJAX?
和本教程: http://www.formget.com/ajax-image-upload-php/
我听说这很难,这就是我尝试过的。

HTML

<form method="POST" action="" id="logo_upload">
    <input type="file" name="logo_location" id="logo_location" enctype="multipart/form-data">
    <button type="submit" name="file_test" id="file_test">Test Upload</button>
</form>

JQuery

$('#logo_upload').submit(function(e) {
    e.preventDefault();
    var formData = new FormData();
    var file_data = $('#logo_location')[0].files[0];
    formData.append("file", file_data[0]);

    $.ajax({
        url: "../../../controllers/ajax_controller.php?action=image_upload",
        type: 'POST',
        data: formData ,
        cache: false,
        contentType: false,
        processData: false,
        id: id
    });
});

PHP

var_dump($_FILES);
var_dump($_POST);

如您所见,我还没有完成上传方面的工作。

结果

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=0)</i>
  <i><font color='#888a85'>empty</font></i>
</pre>

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=0)</i>
  <i><font color='#888a85'>empty</font></i>
</pre>

我看不出我做错了什么,我得到了一个结果,所以它到达了正确的地方,有人能指出我正确的方向吗?

编辑:在表单中添加了#logo_upload var file_data = $('#logo_location')[0].files[0];
编辑:用 formData 变量替换数据
编辑:添加属性:enctype="multipart/form-data"
新结果:

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=1)</i>
  'file' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'undefined'</font> <i>(length=9)</i>
</pre>

最佳答案

您要将 file_data[0] 附加到 formdata 对象,file_data 是文件而不是数组,请使用 file_data

$('#logo_upload').submit(function(e) {
    e.preventDefault();
    var formData = new FormData();
    var file_data = $('#logo_location')[0].files[0];
    formData.append("file", file_data);

    $.ajax({
        url: "../../../controllers/ajax_controller.php?action=image_upload",
        type: 'POST',
        data: formData ,
        contentType: false,
        processData: false,
        success: function(data){
            console.log(data);
        }
    });
});

您还可以使用相关表单实例化表单数据对象,而不是执行附加操作。

$('#logo_upload').submit(function(e) {
    e.preventDefault();
    var formData = new FormData(this);

    $.ajax({
    ...

关于javascript - 通过 Ajax 将图像上传到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568577/

相关文章:

javascript - 调用phonegap摄像头功能后出现空白

javascript - 使用 axios 和 JavaScript 上传图像并在表格中指示响应

php - 如何在 php 中运行或加载 .po/.mo 文件进行本地化

javascript - PHP 和 AJAX : How can I display json_encode data in PHP while loop?

javascript - 多日期选择器 : Disable dates from a list

JavaScript:将数组的项插入另一个数组

javascript - q.all() 同时解决多个 Mongoose 查询

php - 希腊字母和 JSON 响应

javascript - Android 平板电脑(Samsung galaxy 选项卡)- 表格在方向改变时弄乱了

jquery - 使用 jquery 从下拉列表检索值到文本框