Я хочу сгенерировать файл .xlsx на сервере (используя PHP, если он измерен) и открыть результат (фактически окно «Сохранить как …») в новом окне браузера. Чтобы сгенерировать файл на сервере, я должен передать сложные данные (настройки файла), такие как:
[
{
'value1': 1,
'value2': 2,
'value3': 3
},
{
'value4': 4,
'value5': 5,
'value6': 6
}
]
Для этого я делаю что-то вроде:
Ext.create(Ext.form.Panel).submit({
clientValidation: false,
method: 'POST',
params: [
{
'value1': 1,
'value2': 2,
'value3': 3
},
{
'value4': 4,
'value5': 5,
'value6': 6
}
],
standardSubmit: true,
target: '_blank',
url: 'my/real/url'
});
Но на моем сервере я получаю неправильные данные, как
Array (
[0] => [object Object]
[1] => [object Object]
)
в моем $_POST
(где [объект Object] является фактической строкой) или
0=%5Bobject+Object%5D&1=%5Bobject+Object%5D
в моем $data
(Я использую Slim Framework)
$app->post('my/real/url', function () use ($app) {
$request = $app->request();
$data = $request->getBody();
});
На самом деле я пробовал много обходных путей, но я никогда не получал необходимые данные на моей стороне сервера. Может я неправильно использую подход или просто ошибаюсь?
Причина в standardSubmit
конфиг заставит Ext JS создать <form>
и добавьте элементы в эту форму со значениями элементов формы и передаваемых вами параметров. A <form>
Элемент не может содержать сложные значения, такие как массивы или объекты.
Вы можете закодировать ваши данные перед отправкой, а затем на сервере декодировать их:
Ext.create(Ext.form.Panel).submit({
clientValidation: false,
method: 'POST',
params: {
data: Ext.encode([
{
'value1': 1,
'value2': 2,
'value3': 3
},
{
'value4': 4,
'value5': 5,
'value6': 6
}
])
},
standardSubmit: true,
target: '_blank',
url: 'my/real/url'
});
Тогда на вашем сервере, не уверен насчет Slim Framework (никогда не использовал его), но с PHP вы можете использовать json_decode
:
$data = json_decode($_POST['data']);
Других решений пока нет …