Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过extraParams向存储区传递数组只会给出ExtJS中的最后一个值

通过extraParams向存储区传递数组只会给出ExtJS中的最后一个值
EN

Stack Overflow用户
提问于 2015-12-26 07:38:31
回答 2查看 1.1K关注 0票数 1

我正在构建一个web应用程序,其中有一部分需要从给定一组ids的商店中加载记录。我这样做的方式是获取所有的ids,将它们存储在一个数组中,然后用该数组作为额外的param加载存储。

这是我的代码:

代码语言:javascript
运行
AI代码解释
复制
for(var i = 0 ; i < store.count() ; i++){
    console.log("id person = " + store.getAt(i).get("ID_PERSON"));
    idArray.push(store.getAt(i).get("ID_PERSON"));
}

console.log("id array = " + idArray);

store = Ext.getStore('borrowerListStore');

store.getProxy().extraParams={
    idArray: idArray
};

store.load({
    callback: function(records, operation, success) {

        var total = operation.request.scope.reader.jsonData['total'];
        var message = operation.request.scope.reader.jsonData['message'];

        console.log("message  = " + message);
    }

});

首先,我遍历我的初始存储库,然后获取所有ids并将它们存储在Array中。在此之后,我声明我的存储,得到代理,设置参数,然后使用我组装的idArray作为数组。

控制台行向我显示适当的值,例如77, 24, 80,因此我知道我传递了3个值。

然后,在我的商店的read方法中链接的PHP代码中,我执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
else if(isset($_GET['idArray'])){

    $idArray = $_GET['idArray'];

    $array = $idArray;

    for($i = 0 ; $i < count($idArray) ; $i++){
        array_push($array, $idArray[$i]);
    }

    $sql = "SELECT * FROM TABLE WHERE ID IN(".implode(',',$array).")";

$result = mysql_query($sql);    

    $res->message .= " Loaded data ";
    $res->message .= " sql = " . $sql;
    $res->message .= " idArray = " . $idArray;
    $res->message .= " array = " . $array;

    $total = mysql_fetch_array($totalquery);
}

因此,当存储加载并输入回调函数时,我可以看到返回的消息。

然而,当我安慰消息时,在我看来,只有最后一个数组元素才是PHP接收到的唯一东西,因为日志看起来如下:

代码语言:javascript
运行
AI代码解释
复制
message  =  Message start  Loaded data  sql = SELECT * FROM TABLE WHERE ID IN() idArray = 80 array = 80

这里发生了什么事?为什么我不能把数组作为额外的参数传递呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-26 08:57:44

首先,我不确定您是否真的希望将数组作为GET参数进行传输。如果数组变大,则会遇到最大URL长度问题。我肯定建议使用POST并将JSON传输到服务器。

ExtJS 4.2.2正确地将数组发送到服务器,我检查了一下这不是问题。

但我不确定PHP是否理解发送它的格式。似乎当我调用test.php?x=1&x=2时,$_GET['x']不是数组[1,2],而是数字2。但是,我不知道为什么我没有研究PHP代码。作为一个快速的黑客,你可以用

代码语言:javascript
运行
AI代码解释
复制
store.getProxy().extraParams={
    idArray: idArray.join(',')
};

在客户端将ids作为字符串而不是数组传输,并将该字符串解码为

代码语言:javascript
运行
AI代码解释
复制
$array = array_map("intval",explode(",",$_GET['idArray']));

在服务器端。(如果您不使用intval并在SQL查询中不签入任何字符串,则很容易受到SQL注入攻击。)

票数 1
EN

Stack Overflow用户

发布于 2015-12-26 08:38:03

嘿,试着换这条线

代码语言:javascript
运行
AI代码解释
复制
array_push($array, $idArray[$i]);

代码语言:javascript
运行
AI代码解释
复制
$array[] = $idArray[$i];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34472754

复制
相关文章
设计模式-组合实体模式
通常我们收快递,有时候上班期间真的没有空去收啊,所有就会委托其他人,或者说让房管代收一下,然后房管会统一放到一个地方,下再我们再去取,而这个统一管理,我们就不用直接在工作期间去收快递,并且最终也可以拿到我人们的快递。
逍遥壮士
2020/09/18
6290
设计模式-组合实体模式
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
Java架构师必看
2020/04/13
5010
BDC的执行模式与更新模式
MODE 'A' UPDATE 'S' MESSAGES INTO it_messtab. CALL TRANSACTION 'TCODE' USING bdc_tab ... ABAP提供的这个语法是执行BDC的核心,其中bdcdata这个内表的填充方法很多。用事务码 SHDB/SM35可以生成填写这个表的内容,按照ABAP字典结构类型 BDCDATA 的定义对应填写就可以了。 MODE 确定批输入的执行模式,有下面几个可选值: 执行模式,有下列可选值(执行模式常用的是A N) 本帖隐藏的内容 "A" 显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。 "E" 只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。 "N" 不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 "S"、sy-msgid 为 "00"、sy-msgno 为 "344"、sy-msgv1 为 "SAPMSSY3"、sy-msgv2 为 "0131"。 "P" 不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。 更新模式,有下列可选值(更新模式常用的是S) "A" 异步更新。被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。 "S" 同步更新。被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。 "L" 本地更新。被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
matinal
2020/11/27
1.2K0
C#设计模式09——组合模式的写法
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“整体/部分”层次结构。使用此模式,客户端可以按相同的方式处理单个对象和对象集合,而不必关注它们是单个对象还是组合对象。组合对象本身也可以作为容器,包含其他组合对象,形成更复杂的树形结构。
明志德道
2023/10/21
2060
C#的模式匹配
在C# 7.0及更高版本中,模式匹配成为了语言中一个强大的特性,它允许开发者以声明式的方式进行类型检查、值比较和其他复杂的数据结构分析。本文将深入探讨C#中模式匹配的核心概念、应用场景和一些高级技巧。
Michel_Rolle
2024/10/09
2.5K0
C#设计模式12——代理模式的写法
代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问,以提供额外的功能或控制访问权限。
明志德道
2023/10/21
1720
C#设计模式之策略模式
  策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中,   从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
小小许
2020/01/15
8330
C#设计模式10——外观模式的写法
外观模式(Facade Pattern)又称门面模式,是一种结构型设计模式,它提供了一个统一的接口,用来访问一个子系统中一群功能相关联的接口。外观模式定义了一个高层接口,让子系统更容易使用。
明志德道
2023/10/21
1790
聊聊 C# 中的 Composite 模式(组合模式)
Composite组合模式属于设计模式中比较热门的一个,相信大家对它一定不像对访问者模式那么陌生,毕竟谁又没有遇到过树形结构呢。不过所谓温故而知新,我们还是从一个例子出发,起底一下这个模式吧。
独立观察员
2022/12/06
3840
聊聊 C# 中的 Composite 模式(组合模式)
C#设计模式16——中介者模式的写法
中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活、易于扩展和维护。
明志德道
2023/10/21
1720
C#设计模式18——迭代器模式的写法
迭代器模式是一种行为型设计模式,它允许客户端通过一种统一的方式遍历集合对象中的元素,而无需暴露集合对象的内部结构。
明志德道
2023/10/21
1470
C#设计模式19——装饰器模式的写法
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。
明志德道
2023/10/21
3270
C#设计模式02——原型模式的写法
 源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git
明志德道
2023/10/21
1160
C#设计模式02——原型模式的写法
C#设计模式之订阅发布模式
发布订阅是一种设计模式,它允许应用程序组件之间进行松散耦合。 其实订阅发布设计中主要是发布者生成事件通道,用于在不了解任何订阅者存在的情况下通知订阅者。
HueiFeng
2020/05/25
1K0
C#设计模式13——建造者模式的写法
建造者模式是一种创建型设计模式,它通过将一个复杂的对象分解为多个简单的对象并按照一定的顺序进行组装而创建出一个复杂的对象。这样可以使得构造过程更加灵活,同时也可以隐藏创建过程的复杂性。
明志德道
2023/10/21
2150
C#设计模式11——享元模式的写法
享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量。它通过将对象分为可共享的和不可共享的来实现这一目的。
明志德道
2023/10/21
1730
C#设计模式17——责任链模式的写法
责任链模式是一种行为型设计模式,它允许对象组成一个链并依次检查另一个对象是否可以处理请求。如果一个对象可以处理请求,它处理请求,并且负责将请求传递给下一个对象,直到请求被处理为止。
明志德道
2023/10/21
2590
C#设计模式08——桥接模式的写法
什么是C#桥接模式? 桥接模式是一种结构型设计模式,它可以将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过将实现细节从抽象类中分离出来,从而让它们可以根据需要独立变化。
明志德道
2023/10/21
2400
c#设计模式之单例模式
单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源
小小许
2020/01/15
8980
设计模式系列之建造者模式构建实体类
所谓建造者模式就是**将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。**所以建造者模式又叫生成器模式。 建造者模式类图
SmileNicky
2020/10/26
8840
设计模式系列之建造者模式构建实体类

相似问题

存储库模式中实体更新的DB往返

20

没有实体框架的存储库模式?

10

存储库模式与DAO管理实体

20

存储库模式和活动记录模式兼容吗?

20

存储库模式中的实体交换或ORM

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文