ExtJS 4:将复杂数据发送到服务器并在新浏览器中打开结果 window
ExtJS 4: Send complex data to the server and open result in a new browser window
我想在服务器上生成一个 .xlsx 文件(如果合适的话使用 PHP)并在新浏览器中打开结果(实际上 'Save As...' window)window.要在服务器上生成文件,我必须传递复杂的数据(文件设置),例如:
[
{
'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>
并使用表单项的值和您传入的参数向该表单添加项。 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 框架(从未使用过),但是 PHP 你可以使用 json_decode
:
$data = json_decode($_POST['data']);
我想在服务器上生成一个 .xlsx 文件(如果合适的话使用 PHP)并在新浏览器中打开结果(实际上 'Save As...' window)window.要在服务器上生成文件,我必须传递复杂的数据(文件设置),例如:
[
{
'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>
并使用表单项的值和您传入的参数向该表单添加项。 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 框架(从未使用过),但是 PHP 你可以使用 json_decode
:
$data = json_decode($_POST['data']);