数据表:如何从输入发送数据并使用ajax

时间:2018-11-23 11:21:52

标签: php jquery datatable

我陷入了无法轻松解决的问题中。 我已经创建了一些字段(输入和选择),而没有使用<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 "] }";
?>

有人可以帮助我解决这两个问题吗? 提前非常感谢

1 个答案:

答案 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);

reference

jQuery:

$( "form" ).on( "submit", function( event ) {
  event.preventDefault();
  console.log( $( this ).serialize() );
});

reference

有一个不错的人