【问题标题】:sending JSON object along with file using FormData in ajax call and accessing the json object in PHP在 ajax 调用中使用 FormData 发送 JSON 对象和文件并在 PHP 中访问 json 对象
【发布时间】:2017-10-16 23:34:15
【问题描述】:

我正在尝试在 ajax 调用中发送 json 对象和一个文件,如下所示

Javascript

$('#btn').on('click', function(){
    var file_data = $('#imgFile').prop('files')[0];
    var form_data = new FormData();
    let jsonObj = {
        'label1':'value1'
    };
    form_data.append('file', file_data);
    form_data.append('json', jsonObj);//json object which I am trying to send
    $.ajax({
        url: 'uploader.php',
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,
        type: 'post',
        success: function(php_script_response){
            console.log(php_script_response);
        }
    });
});

在 PHP 中,我能够成功检索在 ajax 调用中发送的文件,但 我不知道如何访问与该文件一起发送的 json 对象

PHP

<?php
if ( 0 < $_FILES['file']['error'] ) {
    echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}
else {
    $file_ext=strtolower(end(explode('.',$_FILES['file']['name'])));
    move_uploaded_file($_FILES['file']['tmp_name'], 'uploadedFiles/1.' . $file_ext);
    echo $_POST['json'];
}

请告诉我如何在 php 中检索 json 对象

【问题讨论】:

  • 你在print_r($_POST)看到了什么?

标签: javascript php jquery json ajax


【解决方案1】:

试试这样:

$.ajax({
    url: 'uploader.php',
    cache: false,
    contentType: false,
    processData: false,
    data: form_data+"&json="+jsonObj,
    type: 'post',
    success: function(php_script_response){
        console.log(php_script_response);
    }
});

然后 PHPp 代码应该与 $_POST['json'] 一起使用

【讨论】:

  • 不能用字符串附加二进制表单数据
【解决方案2】:

首先,请注意,您只能通过FormData.append() 方法附加二进制数据或字符串。按原样提供对象意味着将在其上调用toString(),因此该值实际上将变为"[object Object]"

要解决此问题,您需要在 append() 之前手动 JSON.stringify 对象:

let obj = {
    'label1':'value1'
};
form_data.append('file', file_data);
form_data.append('json', JSON.stringify(obj));

然后在您的 PHP 中,您可以使用 json_decode() 反序列化 JSON。

但是,直接将值附加到FormData 对象会更简单。这样你就不需要手动序列化/反序列化任何东西:

form_data.append('file', file_data);
form_data.append('label1', 'value1');
form_data.append('foo', 'bar');

然后在你的 PHP 中:

var label = $_POST['label'];
var foo = $_POST['foo'];

【讨论】:

  • 我在上面代码中提到的 json 对象只是 dummy,实际上对象有很多字段所以我认为附加它们不是一个好主意,我会使用 JSON.stringify(obj) 并且可以请让我知道如何在 php 中使用 json_decode 来检索这个 json,因为我是新手,
  • 我根本不是 PHP 专家,希望文档能告诉你所有你需要知道的:php.net/manual/en/function.json-decode.php
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2022-06-14
相关资源
最近更新 更多