[英]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.