我正在构建一个web应用程序,其中有一部分需要从给定一组ids的商店中加载记录。我这样做的方式是获取所有的ids,将它们存储在一个数组中,然后用该数组作为额外的param加载存储。
这是我的代码:
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代码中,我执行以下操作:
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接收到的唯一东西,因为日志看起来如下:
message = Message start Loaded data sql = SELECT * FROM TABLE WHERE ID IN() idArray = 80 array = 80
这里发生了什么事?为什么我不能把数组作为额外的参数传递呢?
发布于 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代码。作为一个快速的黑客,你可以用
store.getProxy().extraParams={
idArray: idArray.join(',')
};
在客户端将ids作为字符串而不是数组传输,并将该字符串解码为
$array = array_map("intval",explode(",",$_GET['idArray']));
在服务器端。(如果您不使用intval
并在SQL查询中不签入任何字符串,则很容易受到SQL注入攻击。)
发布于 2015-12-26 08:38:03
嘿,试着换这条线
array_push($array, $idArray[$i]);
至
$array[] = $idArray[$i];
https://stackoverflow.com/questions/34472754
复制相似问题