dtxw20878 2015-12-03 16:42
浏览 79
已采纳

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?

  • 写回答

1条回答 默认 最新

  • duanjing7651 2015-12-03 21:51
    关注

    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']);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog