通过datatables ajax请求发送POST数据

时间:2015-04-09 18:39:01

标签: php jquery ajax json jquery-datatables

我试图在数据表中进行简单的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);

如果有人知道如何从这个脚本中获取我的json数组而不使用它应该发送的前一页$ _POST数据,那么我也很乐意发布它。

基本上我只是想知道在通过我的datatables ajax查询提供这个ID数组并进入第二页的sql时,是否有任何我缺少的步骤。 (post_id数组的一个例子是这样的: Array ( [0] => 299 [1] => 1555 [2] => 3539 )

1 个答案:

答案 0 :(得分:0)

诊断此问题非常简单。只需单击鼠标右键,然后检查元素&#34;然后选择“网络”选项卡。像在界面中一样切换事务。您将在网络标签中看到新的网络交易。

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

如果您将有效负载粘贴到jslint.com并对其进行评估,则该错误表示您的响应将失败。造成这种失败的原因将需要比您提供的更多细节。

在您使用的ajax示例中,&#34;数据&#34;是发送到服务器的数据。要在该帖子中发送大量数据,我将您的输入封装在表单标记中,然后在该表单上执行$ .serialize或$ .serializeArray。然后,您可以通过data属性将该序列化数据作为变量发送,并将其发布到您的服务器。从那里,只需通过PHP处理结果的变量。

请更新您的代码以使用1.10 API变量。在将来的版本中将弃用对旧版本的支持。