我陷入了无法轻松解决的问题中。
我已经创建了一些字段(输入和选择),而没有使用<form>
标签。
当用户单击“研究”按钮时,将启动以下脚本:
使用DATATABLES插件将所有字段发送到Php页面。 这是代码:
function assetSearch(){
varvalidation = checkForSelectedFields();
if (validation == "KO")
return;
var arrForm = [];
arrForm.push(document.getElementById("name").value);
arrForm.push(document.getElementById("idConfig").value);
arrForm.push(document.getElementById("serialNumber").value);
arrForm.push(document.getElementById("tipo").value);
arrForm.push(document.getElementById("ambiente").value);
arrForm.push(document.getElementById("modello").value);
arrForm.push(document.getElementById("locazione").value);
arrForm.push(document.getElementById("vendor").value);
arrForm.push(document.getElementById("gruppo").value);
arrForm.push(document.getElementById("stato").value);
arrForm.push(document.getElementById("classe").value);
arrForm.push(document.getElementById("securityLevel").value);
arrForm.push(document.getElementById("aggregatore").value);
console.log(JSON.stringify(arrForm));
var outcomeResearchTable = document.getElementById("OUTCOME_RESEARCH_TABLE");
outcomeResearchTable.style.display = "flex";
$('#OUTCOME_RESEARCH_TABLE').DataTable( {
// "ajax": {
// "url": "asset_GestAsset.php",
// "type": "POST",
// "data": function(d) {
// d.form = $("#researchForm").serializeArray();
// }
//},
"paging": true,
"processing": true,
"ajax": "asset_GestAsset.php",
"deferLoading": 57,
"deferRender": true,
"scrollY": 350,
"scrollX": true,
"bRetrieve": true,
"bDestroy": true,
"iDisplayLength": 100,
"ordering": false,
"info": true,
"sDom": 'ltipr',
"order": [[1, 'asc']]
} );
}
在所有字段中都不是必填项,但必须编译至少一个文本输入。关键是数据表使用前面显示的代码向我发送了一个错误:数据表警告:表ID = OUTCOME_RESEARCH_TABLE-无效的JSON响应。有关此错误的更多信息,请参见http://datatables.net/tn/1
仅出于测试目的,我决定尝试查询并在Datatable上显示值,因此我决定不关心Ajax问题,但另一个问题来了:Php告诉我“内存不足”。通过查看Google Developer Console,我被告知在STATUS(网络内部)列下,php页面处于“待处理”状态约30秒,错误是:
致命错误:内存不足(已分配559939584)(尝试执行 分配25165832字节)
<?php
ini_set('memory_limit', '-1');
include("function.php");
$conn = connectionDB();
$queryOriginale = " select A.ID_CONFIG IDCONF, A.ID_ASSET IDASSET, A.NOME NOME,B.SERIAL_NUMBER SERIALNUMBER, B.TIPO TIPOLOGIA, C.DESCRIZIONE STATO, E.NOME AGGREGATORE,
F.ID_CED,F.SALA,F.FILA,F.POSIZIONE,D.NOME AMBIENTE , H.NOME MODELLO, G.DESCRIZIONE NOMECED, 'n/a' CONTRATTO, A.VALIDA_DAL VALIDADAL,A.VALIDA_AL VALIDAAL
from
PCMDB_INV.ASSET B, PCMDB_INV.CONFIG A, PCMDB_INV.STATO C, PCMDB_INV.AMBIENTE D,
PCMDB_INV.AGGREGATOR E, PCMDB_INV.LOCAZIONE F, PCMDB_INV.CED G, PCMDB_INV.MODELLO H,
PCMDB_INV.SOFTWARE L, PCMDB_INV.SW_CONFIG O, PCMDB_INV.GRUPPO M, PCMDB_INV.TECH_APPLICATION N,
PCMDB_INV.SECURITY_LEVEL P, PCMDB_INV.SEC_LEVEL_CONFIG Q";
$SSS = oci_parse($conn, $queryOriginale);
oci_execute($SSS);
$NUM = oci_fetch_all($SSS, $res);
$stid = oci_parse($conn, $queryOriginale);
oci_execute($stid);
$i = 0;
echo "{ \"aaData\": [\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
$i++;
$a = trim($row["IDCONF"]);
$b = trim($row["NOME"]);
$c = trim($row["TIPOLOGIA"]);
$d = trim($row["STATO"]);
$e = trim($row["AMBIENTE"]);
$f = trim($row["AGGREGATORE"]);
$f2 = trim($row["NOMECED"]);
$g = trim($row["MODELLO"]);
$h = trim($row["CONTRATTO"]);
$l = trim($row["VALIDADAL"]);
$m = trim($row["VALIDAAL"]);
if ($i < $NUM){
echo "[ \"".$a."\", \"".$b."\", \"".$c."\", \"".$d."\", \"".$e."\", \"".$f."\", \"".$f2."\", \"".$g."\", \"".$h."\", \"".$l."\", \"".$m."\" ], \n";
}else {
echo "[ \"".$a."\", \"".$b."\", \"".$c."\", \"".$d."\", \"".$e."\", \"".$f."\", \"".$f2."\", \"".$g."\", \"".$h."\", \"".$l."\", \"".$m."\" ]\n";
}
}
echo "] }";
?>
有人可以帮助我解决这两个问题吗? 提前非常感谢
答案 0 :(得分:1)
while((($ row = oci_fetch_array($ stid,OCI_BOTH))!= false){
这应该有助于解决“内存不足”问题。
其他信息:(考虑一下)
本地js:
var form = document.querySelector('form');
var data = new FormData(form);
var req = new XMLHttpRequest();
req.send(data);
jQuery:
$( "form" ).on( "submit", function( event ) {
event.preventDefault();
console.log( $( this ).serialize() );
});
有一个不错的人