ExtJS 4: отправка сложных данных на сервер и открытие результата в новом окне браузера

Я хочу сгенерировать файл .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();
});

На самом деле я пробовал много обходных путей, но я никогда не получал необходимые данные на моей стороне сервера. Может я неправильно использую подход или просто ошибаюсь?

1

Решение

Причина в 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']);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]