【问题标题】:Sending POST data through datatables ajax request通过datatables ajax请求发送POST数据
【发布时间】:2015-04-09 18:39:01
【问题描述】:

我正在尝试在数据表中进行简单的 ajax 调用,该调用依赖于前一页表单中的 ID 后数组。我收到错误消息:

Invalid JSON Response

这告诉我我返回的 json 数组可能是空的,我感觉这与 POST 数据未发送到我的 php/sql 外部脚本有关,ajax 正在从该脚本请求数据。

我不知道如何测试它,因为我不知道如何在我的外部 php 页面的 URL 中包含 $_POST 数据以彻底触发脚本。

这是结果页面中我当前的数据表 init 和 php:

<?php
include_once('../functions.php');
sec_session_start();
print_r($_POST['post_id']); <-- making sure the post data made it this far
?>

<script type="text/javascript">  
    $(document).ready(function() {
    var compTable = $('#compTab').dataTable({
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "baddebt_ext_sql.php",
            "type": "POST",
            "dataType": 'json',
            "data": {"post_id": $_POST['post_id']}
        },                              
        "Columns": [
            { "data": "provider_num" },
            { "data": "provider_name"},
            { "data": "261_total_bed_debts", "sClass": "rightAlign" },
            { "data": "271_medicare_bad_debts", "sClass": "rightAlign" },
            { "data": "281_non_medicare_bad_debts", "sClass": "rightAlign" },
            { "data": "1_cost_to_charge_ratio", "sClass": "rightAlign" },
            { "data": "291_cost_of_non_mcr_bad_debts", "sClass": "rightAlign" }
        ],
        "scrollY":        "600px",
        "scrollCollapse": true,
        "paging":         false,
        "order": [[ 2, "desc" ]],
        "oLanguage": { "sSearch": "Filter All Fields By:" },
        "Dom": '<"clear">lfrtipT',
        "TableTools": {
              "sSwfPath" : "../php/tabletools/swf/copy_csv_xls_pdf.swf" }
    });

这是我的 SQL:

<?php
include_once('../link_costreport_2013.php');
if(isset($_POST['post_id'])){
    $in = $_POST['post_id']; <-- THIS IS WHERE THE POST DATA IS SUPPOSED TO BE RECEIVED
}
$data = array();
foreach ($in as $id){
    $query = $link->prepare("SELECT id,provider_num, provider_name, 261_total_bed_debts, 271_medicare_bad_debts, 281_non_medicare_bad_debts, 1_cost_to_charge_ratio, 291_cost_of_non_mcr_bad_debts
                FROM `s10`
                            WHERE `id` = :id");
    $query->bindParam(':id', $id, PDO::PARAM_INT);
    $query->execute();
    $results = $query->fetch(PDO::FETCH_ASSOC);
    $results['261_total_bed_debts'] = "\$".number_format($results['261_total_bed_debts']);
    $results['271_medicare_bad_debts'] = "\$".number_format($results['271_medicare_bad_debts']);
    $results['281_non_medicare_bad_debts'] = "\$".number_format($results['281_non_medicare_bad_debts']);
    $results['291_cost_of_non_mcr_bad_debts'] = "\$".number_format($results['291_cost_of_non_mcr_bad_debts']);
    $results['provider_name'] = "<a id='".$results['id']."' data-toggle='modal' href='#provmodal' class='push'>".$results['provider_name']."</a>";
    $data[] = $results;
}
echo json_encode($data);

如果有人知道我如何在不使用它应该发送的先前页面 $_POST 数据的情况下从该脚本获取我的 json 数组,那么我也很乐意发布它。

基本上,我只是想知道在通过我的数据表 ajax 查询和第二页的 sql 提供这个 ID 数组时是否缺少任何步骤。 ( post_id 数组的示例如下: Array ( [0] =&gt; 299 [1] =&gt; 1555 [2] =&gt; 3539 ))

【问题讨论】:

  • 您是否尝试将“dataType”:“json”与 ajax 请求一起使用?
  • @Nathan van der Werf 我刚刚添加了它,仍然收到invalid json response 没有检查 chrome 开发工具,似乎无法在网络选项卡中找到 ajax 响应
  • @Nathan van der Werf 从头开始​​找到了响应,但我无法理解。假设我的帖子数据,看起来 SQL 页面正在返回未定义的变量:编辑 - 未定义的变量 $in,这证实了我的想法
  • 确切的错误是什么?
  • @Nathan van der Werf 我看到的两个是Undefined variable $in,然后它使 foreach 循环无效,所以我也收到了一个错误。

标签: php jquery ajax json jquery-datatables


【解决方案1】:

诊断此问题非常容易。只需右键单击并“检查元素”,然后选择“网络”选项卡。像在界面中一样切换事务。您将在网络选项卡中看到一个新的网络事务。

单击那个新的网络事务——它应该具有您在 ajax 调用中定义的地址。标头将显示您通过 post 发送的变量,响应将显示服务器返回的内容。

该错误表明如果您将有效负载粘贴到 jslint.com 并对其进行评估,您的响应将失败。失败的原因需要比您提供的更多详细信息。

在您使用的 ajax 示例中,“数据”是发送到服务器的数据。要在该帖子中发送大量数据,我会将您的输入包含在表单标签中,然后在该表单上执行 $.serialize 或 $.serializeArray。然后,您可以通过 data 属性将该序列化数据作为变量发送,并将其发布到您的服务器。从那里,只需通过 PHP 处理生成的 post 变量。

请更新您的代码以使用 1.10 API 变量。未来版本将不再支持旧版本。

【讨论】:

  • 发布此数据的表单在另一个页面上,由动态行旁边的复选框组成,这些复选框与该行的 ID(存储在 mysql 中)相关。下一页的 $_POST 数组的大小可以在 1-6000 个 id 之间,所以我不一定理解您的方法将如何提供帮助。我不能单独设置它们,因为任何用户都可以选择任意数量的值。另外,切换交易是什么意思?你的意思是提交表格?我当然可以发布更多代码,但我已经发布了与这个有问题的函数相关的所有内容
  • 根据您的信息更新。 $.serialize 将成为你的朋友。当我说切换时,我假设您可能正在更新数据。显然,Datatables 将按照您的配置发送初始帖子。很多时候,我使用类似的方法为“高级查询”类型 UI 上的数据设置多个过滤器,这就是延迟事务很重要的地方。
  • 好的,我想序列化我的 $_POST['post_id'] 并以这种方式通过 ajax 发送吗?如何做到这一点,然后在另一边用 php 解释它?原谅我的无知......数据表服务器端这周真的把我搞砸了。
  • GET 不返回字符串数组吗?我可以更改我的表单以使用 get 代替吗?
  • 提交表单和您在 Datatables 上定义的 post/get 变量之间存在很大差异。 Datatables 只提交您告诉它的内容。如果页面上有一个表单,数据表不会自动提交它的内容——这就是 ajax 事件的“数据”选项发挥作用的地方。当您按照描述打包表单时,它将通过 get 或 post 传输到您的 php 页面,在那里它将以 $_GET 或 $_POST - 或 $_REQUEST 的形式提供,如果您想在 php 中处理任何一个。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-09-15
  • 2011-05-22
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2014-01-30
  • 2016-01-21
  • 2021-01-05
相关资源
最近更新 更多