无法将变量传递给Ajax调用

时间:2018-08-01 14:55:19

标签: javascript php ajax

我试图通过Ajax调用将两个日期传递给我的php脚本,但是失败并且不返回任何数据。当我仅包含一个变量时,一切正常,并返回数据。我不认为我的问题出在我的PHP脚本中,但为防万一,我将其包含在下面。我读取两个变量的语法正确吗?

这是我的Ajax javascript调用:

<script type="text/javascript">
google.charts.load('current', {'packages': ['bar']});
google.charts.setOnLoadCallback(coxDrawChartDate);

function coxDrawChartDate(startDate,endDate) {

  jQuery.ajax({
      type: "POST",
      data: {start: startDate , end: endDate},
      url: 'http://localhost:8080/automationBarDataCoxDate.php',
      success: function(jsonData) {
          var data = google.visualization.arrayToDataTable(jsonData);
          var options = {
              legend: {
                  position: 'left'
              },
              bars: 'vertical',
              width: '1000',
              height: '500',
          };

          var chart = new google.charts.Bar(document.getElementById('cox_barchart'));
          chart.draw(data, google.charts.Bar.convertOptions(options));
      }
  });


}

这是我的php脚本:

    <?php
// Database credentials
$dbHost = '10.21.124.252';
$dbUsername = 'demouser';
$dbPassword = 'Welcome1';
$dbName = 'syndicationdashboard';
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');

$startDate = intval($_POST['start']);
$endDate =intval($_POST['value']);

// Create connection and select db
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);

// Get data from database
$sql = "SELECT Priority, Automated, isAutomatable, isNotAutomatable FROM automation_progress WHERE platform = 'Cox' AND update_date >= '".$startDate."' AND update_date <= '".$endDate."' AND update_date IN (SELECT MAX(update_date) FROM automation_progress WHERE platform = 'Cox' AND update_date >= '".$startDate."' AND update_date <= '".$endDate."') ORDER BY priority";

if ($result = mysqli_query($db, $sql)) {
    while ($row = mysqli_fetch_assoc($result)) {
        if (count($data) === 0) {
            $data[] = array_keys($row);
        }

       $data[] = [
           $row['Priority'],
           intval($row['Automated']),
           intval($row['isAutomatable']),
            intval($row['isNotAutomatable']),
       ];
   }

   mysqli_close($db);

   echo json_encode($data);

}
?>

3 个答案:

答案 0 :(得分:2)

$startDate = intval($_POST['start']);
$endDate =intval($_POST['value']);

$_POST['value']

不存在,应该是

$_POST['end']

答案 1 :(得分:0)

您在JavaScript中编写了

s2->n1->v1->time2
s4->n1->v2->time2

因此,您将发送两个名为“ start”和“ end”的POST变量。您可以通过浏览器的开发人员工具(在“网络”标签中)观看AJAX调用并查看在AJAX请求的正文中发送的内容来验证这一点。

但是您的PHP正在寻找未发送的名为“ value”的POST变量。这可能会导致您的数据库查询失败,并出现语法错误,或者执行但不匹配任何行,因为将不会填充 data: {start: startDate , end: endDate}

$endDate更改为$_POST["value"]将使您能够捕获PHP中的值。

您可以通过在PHP脚本的开头附近添加$_POST["end"]作为临时调试行来验证服务器接收的POST值。这会将POST的全部内容输出到您的响应中,因此您可以查看其中包含哪些变量以及它们的名称。

如果var_dump($_POST);返回false(表示失败),您可能还想考虑记录错误和/或在响应中返回错误消息,以便可以更轻松地确定问题的根源并加快调试速度

答案 2 :(得分:0)

我已经解决了这个问题。我正在将$ _POST格式化为和intval。一旦我从PHP文件中删除了它,一切就可以正常工作。因此,我从以下位置更新了这两行:

$startDate = intval($_POST['start']);
$endDate =intval($_POST['end']);

收件人:

$startDate = $_POST['start'];
$endDate = $_POST['end'];