【问题标题】:DataTables: How to send Data from input and select Fields using ajaxDataTables:如何从输入中发送数据并使用 ajax 选择字段
【发布时间】:2019-04-26 00:17:20
【问题描述】:

我陷入了无法轻松处理的问题。 我创建了一些字段(输入和选择)而不使用<form> 标签。 当用户单击“研究”按钮时,将启动以下脚本:

  • 从字段中获取所有值,
  • 使用 DATATABLES 插件将所有字段发送到 Php 页面。 代码如下:

    函数assetSearch() {

    var 验证 = 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']]
      } );
    

    }

所有字段都不是必填项,但至少必须编译一个文本输入。关键是 Datatables 使用前面显示的代码向我发送了一个错误:DataTables warning: table id=OUTCOME_RESEARCH_TABLE - Invalid JSON response。有关此错误的更多信息,请参阅http://datatables.net/tn/1

只是为了测试,我决定尝试查询并在数据表上显示值,所以我决定不关心 Ajax 问题,但另一个问题来了:Php 告诉我“内存不足”。查看谷歌开发者控制台我被告知在列下:状态(内部网络)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 "] }";
?>

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

【问题讨论】:

    标签: php jquery datatable


    【解决方案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

    祝你愉快

    【讨论】:

    • 使用 OCI_BOTH 和 != false 帮助我将时间从 30 秒减少到更少(我仍然收到错误:致命错误:内存不足(已分配 251658240)(试图在 C 中分配 12582920 字节): \xampp\htdocs\\asset_GestAsset.php 在第 18 行)
    • 第二,您的建议没有考虑如何处理DataTable。无论如何,谢谢你的提示! :)
    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2015-03-07
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多