отправка объекта JSON вместе с файлом с использованием FormData в ajax-вызове и доступ к объекту json в PHP


0 принят

Во-первых, обратите внимание, что вы можете добавлять только двоичные данные или строку FormData.append(). Предоставление объекта, поскольку вы являетесь средством, которое toString()будет вызвано на него, поэтому значение действительно станет "[object Object]".

Чтобы исправить это, вам понадобится вручную JSON.stringifyобъект перед тем, как вы append()это:

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

Затем в вашем PHP вы можете десериализовать использование JSON json_decode().

Однако было бы гораздо проще просто добавить значения к 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'];

0

Попробуйте вот так:

$.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']

JavaScript, PHP, JQuery, JSON, AJAX,

javascript,php,jquery,json,ajax,

3

Ответов: 2


0 принят

Во-первых, обратите внимание, что вы можете добавлять только двоичные данные или строку FormData.append(). Предоставление объекта, поскольку вы являетесь средством, которое toString()будет вызвано на него, поэтому значение действительно станет "[object Object]".

Чтобы исправить это, вам понадобится вручную JSON.stringifyобъект перед тем, как вы append()это:

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

Затем в вашем PHP вы можете десериализовать использование JSON json_decode().

Однако было бы гораздо проще просто добавить значения к 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'];

0

Попробуйте вот так:

$.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']

JavaScript, PHP, JQuery, JSON, AJAX,
Похожие вопросы