Php ExtJS4:将复杂数据发送到服务器,并在新的浏览器窗口中打开结果
我想在服务器上生成一个.xlsx文件(如果需要使用PHP),并在新的浏览器窗口中打开结果(实际上是“另存为…”窗口)。要在服务器上生成文件,我必须传递复杂的数据(文件设置),如: 为此,我做了如下工作:Php ExtJS4:将复杂数据发送到服务器,并在新的浏览器窗口中打开结果,php,extjs,extjs4,form-submit,slim,Php,Extjs,Extjs4,Form Submit,Slim,我想在服务器上生成一个.xlsx文件(如果需要使用PHP),并在新的浏览器窗口中打开结果(实际上是“另存为…”窗口)。要在服务器上生成文件,我必须传递复杂的数据(文件设置),如: 为此,我做了如下工作: Ext.create(Ext.form.Panel).submit({ clientValidation: false, method: 'POST', params: [ { 'value1': 1, 'v
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]
)
在my$\u POST中(其中[object object]是实际字符串)或
在我的$data
中(我使用的是Slim框架)
事实上,我尝试了许多变通方法,但我从未在服务器端获得所需的数据。可能我使用了错误的方法,或者只是做了错误的事情?原因是standardSubmit
config将导致Ext JS创建一个
,并使用您传入的表单项和参数的值向该表单添加项。
项不能包含数组或对象等复杂值
您可以在数据发送之前对其进行编码,然后在服务器上对其进行解码:
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\u decode
:
$data = json_decode($_POST['data']);
原因是standardSubmit
config将导致Ext JS创建一个
,并使用您传入的表单项和参数的值向该表单添加项。
项不能包含数组或对象等复杂值
您可以在数据发送之前对其进行编码,然后在服务器上对其进行解码:
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\u decode
:
$data = json_decode($_POST['data']);
谢谢,似乎将数据编码为JSON是唯一的方法。如果有人对如何使用PHP Slim处理这个问题感到好奇-$data=json\u decode($app->request()->post('data'),true)代码>谢谢,似乎将数据编码为JSON是唯一的方法。如果有人对如何使用PHP Slim处理这个问题感到好奇-$data=json\u decode($app->request()->post('data'),true)代码>
$data = json_decode($_POST['data']);