繁体   English   中英

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

[英]ExtJS 4: Send complex data to the server and open result in a new browser window

我想在服务器上生成一个.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 Object]是实际字符串)或

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

在我的$data (我使用Slim框架)

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

实际上,我尝试了许多解决方法,但从未在服务器端获得所需的数据。 也许我使用错误的方法还是做错了?

原因是standardSubmit配置将使Ext JS创建一个<form>并使用表单项的值和您传入的参数将项添加到该表单中。 <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框架(从未使用过),但是使用PHP可以使用json_decode

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM