ExtJS 4:将复杂数据发送到服务器并在新的浏览器窗口中打开结果

I want to generate an .xlsx file on the server (using PHP if it metters) and open result (actually 'Save As...' window) in a new browser window. To generate file on the server I have to pass complex data (file settings) like:

[
    {
        'value1': 1,
        'value2': 2,
        'value3': 3
    },
    {
        'value4': 4,
        'value5': 5,
        'value6': 6
    }    
 ]

For this I doing something like:

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'
});

But on my server I keep getting wrong data, like

Array (
    [0] => [object Object]
    [1] => [object Object]
)

in my $_POST (where [object Object] is actual string) or

0=%5Bobject+Object%5D&1=%5Bobject+Object%5D

in my $data (Im using Slim framework)

$app->post('my/real/url', function () use ($app) {
    $request = $app->request();
    $data = $request->getBody();
});

Actually I tried many workarounds but I never get required data on my server side. Maybe I using wrong approach or just do it wrong?

The reason is standardSubmit config will cause Ext JS to create a <form> and add items to that form with the values of the form items and the params you pass in. A <form> item cannot contain complex values like arrays or objects.

You can encode your data before it's sent and then on the server decode it:

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'
});

Then on your server, not sure about Slim framework (never used it), but with PHP you can use json_decode:

$data = json_decode($_POST['data']);