我必须编程一个网站包含一个日历与事件,与循环通过月份的可能性,这个日历是由php函数生成的,我试图添加一个eventListener到一个div,这样当我点击它时,它将循环通过月份,每次生成一个新的日历。
经过一些研究后,我发现我需要使用AJAX,但我真的不知道如何使用它。
下面是我的代码:
let next = document.getElementById("buttonNext");
let monthNb = String(new Date().getMonth() + 1).padStart(2, '0');
let yearNb = new Date().getFullYear();
next.addEventListener("click", function(event) {
monthNb++;
If (monthNb > 12) {
yearNb++;
}
// I know I am trying to send js var as php but idk ;-; v v
document.getElementById("calendarContainer").innerText = '<?php echo createCalendar(yearNb, monthNb); ?>';
});HTML/PHP:
<div class="button_leftRight"><img src="icons/left" id="buttonBack"></div>
<div class="button_leftRight"><img src="icons/right" id="buttonNext"></div>
<div id="calendarContainer">
<?php
echo createCalendar($year, $month);
?>
</div>感谢您的宝贵时间!希望能找到一个好的解决方案!
如果你需要更多的信息,让我知道,我可能会忘记一些事情,这是我第一次发帖子。
发布于 2020-09-11 23:55:18
如果您使用PHP并将POST请求发送到Fetch脚本,您可以像这样尝试-未经测试:
<?php
# calendar.php ~ obviously there will need to be MORE code than this...
if( SERVER['REQUEST_METHOD']=='POST' && isset($_POST['year'],$_POST['month']) ){
#ensure no extra data is sent back - flush buffers
ob_clean();
#send a response
exit( createCalendar( $_POST['year'], $_POST['month'] ) );
}
?>以及使用Fetch发送AJAX请求的Javascript
let next = document.getElementById("buttonNext");
let monthNb = String(new Date().getMonth() + 1).padStart(2, '0');
let yearNb = new Date().getFullYear();
next.addEventListener("click", function(event) {
monthNb++;
If (monthNb > 12) {
yearNb++;
}
let fd=new FormData();
fd.append('year',yearNb);
fd.append('month',monthNb);
fetch( '/path/to/calendar.php', {method:'post',body:fd})
.then( res=>res.text() )
.then( text=>{
document.getElementById("calendarContainer").innerHTML=text
})
});发布于 2020-09-11 23:56:54
有很多方法可以做ajax和许多优化,但我给你一个如何做的简单指南。最简单的方法是创建一个php文件,让我们在web服务器中将其命名为ajax.php,其内容为
<?php echo createCalendar($_GET['year'], $_GET['month']); ?>然后,在您的js代码中对该ajax.php文件进行ajax调用,例如:
let next = document.getElementById("buttonNext");
let monthNb = String(new Date().getMonth() + 1).padStart(2, '0');
let yearNb = new Date().getFullYear();
next.addEventListener("click", function(event) {
monthNb++;
If (monthNb > 12) {
yearNb++;
}
fetch(`ajax.php?year=${yearNb}&month=${monthNb}`, {
method: 'GET',
headers:{
'Content-Type': 'application/json'
},
})
.then(response => {
document.getElementById("calendarContainer").innerText = response;
}).catch(error => console.error('Error:', error));
});
https://stackoverflow.com/questions/63850249
复制相似问题