我试图通过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);
}
?>
答案 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'];