如何在store.load中传递数组或对象({params:{}})?

时间:2015-08-10 06:11:38

标签: javascript php extjs

store.load({
        params: {
            start: 0,
            limit: 1000,
            proc_nm: 'sel_bkng_srch',
            test_parms1: [
                {'parm_val_var1':1, 'parm_val_var1':2}
            ],
            srchStrng: '',
            test_parms2: JSON.stringify(parm_val_var1, parm_val_var1),
            connId: 'AW'
        } ....

test_parms1test_parms 2试图将某种数组/对象作为存储过程参数传入php,而不必单独列出它们。我的所有尝试都以PHP作为[object object]或仅作为第一个值结束。以为我有这一切工作,但我只发送1个参数,它完美地工作。什么是正确的语法? TIA。

2 个答案:

答案 0 :(得分:0)

>>> d1 = {'a': 1, 'b':2} >>> d2 = {'a':2, 'b': 2, 'c':3} >>> diff = set(d1.items()).symmetric_difference(d2.items()) >>> diff {('a', 2), ('c', 3), ('a', 1)} >>> 代表数组。

带有3个元素的

[]数组。

[1,2,3,]代表对象。

{}是具有键值对的3个对象数组的示例。

尝试更改[{"as":1},{"asa":2},{"sd":3}]

[ {'parm_val_var1':1, 'parm_val_var1':2}],它基本上是Json对象的数组,其中每个对象都有一个键值对。

对于下面给出的json,元素将被访问为: [{"parm_val_var1":1}, {"parm_val_var1":2}]

{"abc":[{"as":1},{"asa":2},{"sd":3}]}

请注意我已将'(单引号)替换为“(双引号)。它是JSON standard

答案 1 :(得分:0)

store.load({
        params: {
            start: 0,
            limit: 1000,
            proc_nm: 'sel_bkng_srch',
            test_parms2: JSON.stringify([dnStrng, mtStrng, dtFromStrng, dtToStrng]),
            connId: 'AW'
        }, ....

然后在php:

$proc_parms = json_decode($_REQUEST['test_parms2']);
$procNm = $_REQUEST['proc_nm'];

$proc_parms_ar = array();
$i = 0;
foreach($proc_parms as $val) {
    flog("val = %s", $val);
    array_push($proc_parms_ar,array($proc_parms[$i], 1));
    $i++;
}

$tsql_callSP = "{call " .  $procNm . "( ?, ?, ?, ?)}";

/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql_callSP, $proc_parms_ar);

这将获取parms列表并创建一个sqlsrv所需的数组,其中'parm1,1'定义一个输入参数,然后调用ExtJS存储请求的SQLServer存储过程。 $ tsql_callSP需要从parms数组构造,所以'?'为每个参数添加。