У меня есть два входных текстовых поля с именем startDate и endDate и кнопка отправки. Я сделал бэкэнд кода на PHP, так что он берет ввод (даты) из двух текстовых полей и после нажатия кнопки отправки выводит файл JSON, который может отображать D3.D3 получение NULL для пользовательского ввода во время обратного вызова
Проблема заключается в том, что я получаю сообщение «Uncaught TypeError: Can not read property» length of undefined », но когда я вводил значения startDate и endDate вручную (объявляя значение вместо того, чтобы быть пользователем), он работает в совершенстве. Я предполагаю, что значения sDate и eDate не передаются должным образом во время обратного вызова, поэтому он возвращает NULL. Я даже не знаю, как это исправить.
Обмен моим кодом здесь.
HTML:
<body>
<form id="user" action="#" method="post">
<table>
<tr>
<td>Start Date:</td>
<td><input id="start_date" type="text" name="startDate" value="" size="30" /> </td>
</tr>
<tr>
<td>End Date:</td>
<td> <input id="end_date" type="text" name="endDate" value="" size="30" /></td>
</tr>
</table>
<div id="submit_button">
<input type="reset" value="Clear" />
<input id="submitButton" type="submit" value="Submit" />
</div>
</form>
<div id="contents" style="width:500px; height:500px;"></div>
<!-- data should appear once Submit button is clicked -->
<script>
$(document).ready(function(){
$('#submitButton').click (function(e){
e.preventDefault();
renderTable();
});
});
</script>
<!-- D3 -->
<script>
function renderTable(){
d3.json("data.php", function(error, data) {
var c_data = d3.select("#contents").append("svg")
.attr("width", 500)
.attr("height", 500)
var bars = c_data.selectAll("rect")
.data(data)
.enter()
.append("rect")
.attr("width", function(d){return d.value * 30})
.attr("height", 50)
.attr("y", function(d, i){return i * 80})
})
}
</script>
</body>
PHP:
<?php
$db = new PDO($hostname, $username,$password);
//$startDate = '2014-11-21'; --> works when this is used
//$endDate = '2014-11-23'; --> works when this is used
if(isset($_POST['startDate']))
{ $startDate = $_POST['startDate'];};
if(isset($_POST['endDate']))
{ $endDate = $_POST['endDate'];};
$statement = $db->prepare(*SQL statement edited out*);
$statement->execute(array($startDate, $endDate));
$jsonData=$statement->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($jsonData);
?>
Дополнительная информация:
Я получаю это для data.php элемента:
Уведомление: Undefined индекс : startDate в /Приложения/XAMPP/xamppfiles/HTDOCS/MyProject/data.php
Примечание: Не определен индекс: EndDate в /Applications/XAMPP/xamppfiles/htdocs/myProject/data.php []
Ну, вы не являетесь 'POST'ing формой, поэтому данные не будут отправлены. Вы можете добавить значения к URL-адресу, который вы вызываете как параметры, и запросить их через '$ _GET'. –
Привет, @LarsKotthoff! Я не уверен, что понимаю, что вы имеете в виду. Не могли бы вы привести более конкретный пример? Я лучше всего узнаю, когда вижу код. Спасибо! – rock3teer
Что-то вроде 'd3.json (" data.php? StartDate = "+ startDate +" & endDate = "+ endDate, function (...) {...})'. –